Laravel 手动生成重置密码令牌:收到错误“此密码重置令牌无效”

Posted

技术标签:

【中文标题】Laravel 手动生成重置密码令牌:收到错误“此密码重置令牌无效”【英文标题】:Laravel Manually generating reset password token : Getting error "This password reset token is invalid" 【发布时间】:2018-09-30 19:31:01 【问题描述】:

我正在尝试在 laravel 中手动生成重置密码令牌。

$string = hash_hmac('sha256', Str::random(40), "my hash string");

然后我得到“0afa340dc692ffa51c1ba12b1db8819a8e4eaebb44a991bb288c3af877d36ee6

我用

对这个字符串进行了哈希处理
$hash = Hash::make($string);

然后我得到了

$2y$10$onDUmasKFCF9r1.VwOq3ze7Kx225UZK/HkwoUmH4h5dRo/8iCV2Be

我将哈希令牌保存在与电子邮件 ID 对应的“password_resets”表中。 我替换了重置密码网址中生成的字符串并尝试重置指定电子邮件的密码,但我总是收到“This password reset token is invalid”。

我的手动生成是否有任何错误。请帮忙。

【问题讨论】:

见这里:github.com/laravel/framework/issues/18570 【参考方案1】:

您的模型中的此功能将生成密码休息链接:

public function getNewPassResetUrl()
    $token=str_random(60);
    \DB::table('admin_password_resets')->where('email',$this->email)->delete();
    \DB::table('admin_password_resets')->insert([
        'email' => $this->email,
        'token' => \Hash::make($token), //change 60 to any length you want
        'created_at' => \Carbon\Carbon::now()
    ]);
    return url('reset',$token);

【讨论】:

你能把你的答案说清楚你说的是哪个型号吗?我这里也有同样的问题【参考方案2】:

要生成一个令牌,你可以像下面的 sn-p 那样做,这对使用 Laravel 的实现有额外的好处,所以如果它在某个时候发生了变化,你不需要改变任何东西。

\Illuminate\Support\Facades\Password::broker('users')->createToken($user);

【讨论】:

以上是关于Laravel 手动生成重置密码令牌:收到错误“此密码重置令牌无效”的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1/AngularJS:在 Angular 视图中重置密码(如何验证 CSRF 令牌?)

Laravel 更改密码重置特定令牌的令牌持续时间

身份密码重置令牌无效

Laravel 5.5 自定义重置密码抛出令牌不匹配

Laravel 5 邮箱重置密码

密码重置令牌存储 - 值应该被散列吗?