PHP
laravel5.5

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

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