Edited at

Laravel5.5でパスワードリセット後のログイン認証に失敗する

More than 1 year has passed since last update.

Laravel5.5でパスワードリセット後のログイン認証に失敗したのでメモします


原因

パスワードのリセット時に、User.phpで定義しているsertPasswordAttribute()とパスワードリセット時に通過するresetPassword()関数で二重にハッシュ化されているのが問題でした


User.php

    // こっちは自分で実装しました

public function setPasswordAttribute($value = '')
{
$this->attributes['password'] = Hash::make($password);
}


ResetPasswords.php


/**
* Reset the given user's password.
*
* @param \Illuminate\Contracts\Auth\CanResetPassword $user
* @param string $password
* @return void
*/

protected function resetPassword($user, $password)
{
$user->password = Hash::make($password);

$user->setRememberToken(Str::random(60));

$user->save();

event(new PasswordReset($user));

$this->guard()->login($user);
}



解決方法

幸いにもトレイトを利用して実装されていたのでResetPasswordController.phpの中でresetPassword()をオーバーライドしましょう


ResetPasswordController.php


/**
* Reset the given user's password.
*
* @param \Illuminate\Contracts\Auth\CanResetPassword $user
* @param string $password
* @return void
*/

protected function resetPassword($user, $password)
{
$user->password = $password;

$user->setRememberToken(Str::random(60));

$user->save();

event(new PasswordReset($user));

$this->guard()->login($user);
}


これでうまくいくはず!同じ現象で困っていてうまくいかない人はコメントください(´ε` )


余談

2015年のIssueですが、当時話題に上がってたようです

setPasswordAttribute conflicts with password reset process