2013-04-24 3 views
9

У меня есть приложение Laravel 4, в котором я настроил одного пользователя. В моем логин-логике я звоню Auth::attempt с адресом электронной почты и паролем, но он всегда возвращается как ложный. У меня определенно правильный пароль и правильный хэш в базе данных, так как Hash::check возвращает true.Laravel 4 аутентификация не работает

Я думаю, что это может быть связано с использованием email в качестве поля входа вместо username, но я не вижу никаких настроек для этого. This question подразумевает, что вы можете добавить опцию в config/auth.php, но это не сработало. This question говорит использовать ключ username как ключ массива, но затем я получаю ошибку SQL, потому что он пытается выбрать в поле имя пользователя в базе данных.

Нужно ли добавить что-то в модель пользователя, чтобы указать поле имени пользователя? Вот мой логин:

Route::post('login', function() { 

    // data from login form 
    $credentials = array(
     'email' => Input::get('email'), 
     'password' => Input::get('password') 
    ); 

    $auth = Hash::check(Input::get('password'), Hash::make('mypass')); 
    var_dump($auth); // this is TRUE 

    // login was good 
    $auth = Auth::attempt($credentials); 
    var_dump($auth); // this is FALSE 
}); 
+2

Ключ массива должен соответствовать столбцу, который используется для аутентификации пользователей в базе данных. Это упоминается в [docs] (http://four.laravel.com/docs/security#authenticating-users). Вы изменили модель 'User' по умолчанию, с которой поставляется L4? –

ответ

11

Я нашел проблему. Как было предложено Джейсоном в комментарии выше, я изменил файл models/User.php и удалил некоторые функции, которые я не осознавал, были необходимы.

В модели пользователя для аутентификации должны быть включены методы getAuthIdentifier() и getAuthPassword().

+3

Что они делают. Модель также должна реализовывать «UserInterface» и «RemindableInterface». –

6

В app/config/app.php убедитесь, что у вас установлен «ключ». Это заставило меня вытащить волосы. Все будет работать, пароль кажется хэшированным в БД, но он всегда будет возвращать false до тех пор, пока вы не установите этот ключ и не переустановите свой пароль в БД.

"ключ PHP ремесленник: генерировать"

+0

Спасибо, много человек. Я использую генератор Laravel 4 от Jeffery Way, и я полностью забыл эту критическую точку в установке Laravel, прежде чем начал кодировать мои маршруты и контроллеры. –

1

Была такая же проблема и заставила меня потеть часами. Определенно проверьте свою модель User.php и убедитесь, что у вас нет , переписанный по умолчанию. Спасибо Джейсону!

Смежные вопросы