@EA-EKB

Из-за чего Auth::attempt возвращает false при передаче ему логина и пароля, которые существуют в БД?

Доброго времени суток!

Пытаюсь написать свой модуль для работы с пользователями, но застрял на авторизации. В документации всё элементарно:
if (Auth::attempt(['login' => $request->login, 'password' => $request->password]))
    return 'Пользователь авторизован';
else
    return 'Пользователь не авторизован';


Но в моём случае Auth::attempt постоянно возвращает false, даже когда явно передаю логин и хеш пароля из БД
Auth::attempt(['login' => 'login', 'password' => 'f394h0wxfc9t54hgdc78w9f...']) <= pbkdf2-хеш пароля длинной 75 символов

Запись с таким логином и паролем в БД есть. Хеши паролей (вывожу из БД и сгенерированный в своём методе авторизации) совпадают полностью. Регистр в названиях полей соблюдается.

Так же столкнулся с такой проблемой: изначально в БД поле password имело имя pass, но Auth::attempt выдавал ошибку "не определено password", добавление
public function getAuthPassword() {
    return $this->pass;
}
в модель пользователя ничего не давало. Как указать свой набор полей в Auth::attempt?

Метод авторизации:
public function login(Request $request) {
    $user = User::whereLogin($request->login)->first();
    $user_db_pass = hash_pbkdf2("sha256", $request->pass, $user->salt, 1000, 75);

    //dd(Auth::attempt(['login' => 'admin', 'password' => 'c0b6de9afb4a16e83cba60e5946a87d84a6333f7064237126c0e58aa03699d86e43965e643a']));

    if ($user->password == $user_db_pass) {
        if (Auth::attempt(['login' => $request->login, 'password' => $user_db_pass]))
            return redirect()->intended(route('users.profile'));
        else
            return $user->password.'<br>'.$user_db_pass;
    }
}
  • Вопрос задан
  • 652 просмотра
Пригласить эксперта
Ответы на вопрос 1
JhaoDa
@JhaoDa
LaravelRUS Team
А зачем вы туда передаёте хэш пароля вместо самого пароля? Если у вас свой механизм хэширования паролей, так и напишите для него обвязку, либо не используйте Auth::attempt, потому что у него внутри (вот удивительно!) хэшируются пароли при сравнении.

P.S. И да, в данном контексте не «авторизация», а «аутентификация».
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы