Laravel-尝试重设密码时,我不断收到“此密码重设令牌无效”的信息

时间:2019-09-18 13:40:08

标签: laravel passwords

这是我的config / auth.php

 'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
        'customers' => [
            'provider' => 'customers',
            'table' => 'customer_password_resets',
            'expire' => 120,
        ],
        'admin' => [
            'provider' => 'admins',
            'table' => 'admin_password_resets',
            'expire' => 60,
        ],
    ],

尝试重设客户密码时,出现错误“此令牌无效”。

这是我的ResetsPassword.php-> reset()

 public function reset(Request $request)
    {
        $this->validate($request, $this->rules(), $this->validationErrorMessages());


        $response = $this->broker()->reset(
            $this->credentials($request), function ($user, $password) {
                $this->resetPassword($user, $password);
            }
        );


        return $response == Password::PASSWORD_RESET
                    ? $this->sendResetResponse($response)
                    : $this->sendResetFailedResponse($request, $response);
    }

这是密码重置请求: password reset request

1 个答案:

答案 0 :(得分:1)

必须先生成密码重置令牌,然后才能发布到password.update路由。通常,当用户在向其发送密码重置链接之前在表单中输入其电子邮件地址时,就会发生这种情况。

对于自定义实现,您可能需要手动生成令牌。

use Illuminate\Auth\Passwords\PasswordBroker;

// insert a token record into the password reset table
$token = app(PasswordBroker::class)->createToken($customer);

编辑:令牌从代理返回的值是未加密的值,同时,令牌将其作为哈希值存储在数据库中。与CSRF reset()不同,请确保将 unhashed 令牌值作为参数token提交给_token方法,且不带下划线。

此外,您的Customer模型必须扩展Authenticatable

class Customer extends Authenticatable
{
    // ...
}