Проверка аутентификации laravel 4 всегда возвращает false

Я делаю приложение в laravel 4 и столкнулся с проблемой.

До сих пор я пытался создать систему аутентификации. Я следовал нескольким учебникам, но ни один из них не работает. Возможно, потому что туториал уже устарел (laravel постоянно развивается).

Вот моя ситуация:

У меня есть форма входа, эта форма аутентифицирует пользователя. И это прекрасно работает, это код в моем файле route.php.

Route::post('login', function () {
    $user = array(
        'e-mail' => Input::get('E-mail'),
        'password' => Input::get('password')
    );
    if (Auth::attempt($user)) {
        return Redirect::route('home')
            ->with('flash_notice', 'You are successfully logged in.');
    }

    // authentication failure! lets go back to the login page
    return Redirect::route('login')
        ->with('flash_error', 'Your username/password combination was incorrect.')
        ->withInput();
});

Итак, когда я вхожу в систему, я перехожу на домашнюю страницу, и отображается сообщение, никаких проблем нет. На мой взгляд, у меня есть следующий код (для этого я использую лезвие).

        <ul>
            <li><a href="{{ URL::to('home') }}">Home</a></li>
            @if(Auth::check())
                <li><a href="{{ URL::to('profile') }}">Profile</a></li>
                <li><a href="{{ URL::to('logout', 'Logout ('.Auth::user()->e-mail.')') }}">Logout</a></li>
            @else
                <li><a href="{{ URL::to('login') }}">Login</a></li>
            @endif
        </ul>

Проблема в том, что независимо от того, что Auth::check() возвращает false. Я исследовал эту проблему в течение нескольких часов и не знаю, где продолжить...

В модели User метод getKey() возвращает null, поэтому я подумал, что моя база данных может быть неправильной. Но данные извлекаются отлично.

Спасибо за ваше время.


person Dries    schedule 21.05.2013    source источник
comment
Это явно не PHP.   -  person SDZ    schedule 21.05.2013
comment
Да, это... Почему бы и нет?   -  person Mike Rockétt    schedule 21.05.2013
comment
Сами, это всего лишь шаблоны. Майк, не мог бы ты посмотреть, есть ли в твоем браузере куки?   -  person Adelf    schedule 21.05.2013
comment
есть куки, laravel_session   -  person Dries    schedule 21.05.2013


Ответы (3)


Как оказалось, это была глупая ошибка. Laravel определяет первичный ключ по умолчанию как «id» в малых заглавных буквах. Идентификатор, который я использовал в своей базе данных, был определен как «ID».

Я исправил это, изменив имена полей в моей базе данных. Другой вариант - определить

protected $primaryKey = 'ID';

в вашей модели...

Хорошего дня

person Dries    schedule 22.05.2013

$user = array( 'e-mail' => Input::get('E-mail'), 'password' => Input::get('password') );

За кулисами Eloquent или Fluent Query Builder попытаются выполнить выборку, используя запрос, эквивалентный следующему:

$user = User::where('e-mail', '=', ?)->first();

Все было бы хорошо, если бы у вас было поле e-mail, но это вызвало бы проблемы с Eloquent, поскольку Auth::user()->e-mail стал недопустимым синтаксисом.

person crynobone    schedule 21.05.2013
comment
Я изменил поле электронной почты на имя пользователя, но возникает та же проблема. Я совершенно новичок в laravel, поэтому, возможно, я неправильно понял ваше сообщение. Хотя я действительно работаю с красноречивым. Кстати, это руководство, на котором я основывал свою работу: laravelbook.com/laravel-user-authentication - person Dries; 21.05.2013

Просто проверьте, находится ли маршрут в группе веб-промежуточного программного обеспечения.

Route::group(['middleware' => 'web'] , function() {
}

Аутентификация не работает, если на странице нет промежуточного программного обеспечения.

person Sree Menon    schedule 01.03.2016