Laravel密码经纪人门面

时间:2018-01-16 13:35:33

标签: php laravel passwords

如何在Laravel 5.5中使用密码代理外观将用户与令牌匹配?

我通过生成令牌向用户发送邮件:

app('auth.password.broker')->createToken($this->user)

这会自动使用用户电子邮件填充数据库中的password_resets表,并使用看似已散列的令牌值。

用户的回调URL是password-reset/{token},现在我想检查令牌是否有效,方法是检查令牌是否存在,以及连接到用户的用户是否触发了密码重置。

$tokenValid = DB::table('password_resets')->where('token', $input['token'])->first();

然而,这不起作用,因为来自输入的令牌不以任何方式进行哈希处理。我也尝试了这个

$tokenValid = DB::table('password_resets')->where('token', bcrypt($input['token']))->first();

但散列值不正确。

有人知道如何将其与数据库值相匹配吗?

2 个答案:

答案 0 :(得分:2)

我找到了答案。两个哈希,即使不同,也可能匹配。在同一个字符串上执行两次bcrypt()函数不会产生相同的哈希值,因此有一个帮助方法来检查哈希值是否匹配:

Hash::check($input['token'], $token->token)

答案 1 :(得分:0)

您可以像这样将未散列的令牌插入(password_resets)数据库表中:-

public function forgotpassword_post(){
    $admin=Admin::where('email',request('email'))->first();
    if(!empty($admin)){
        $token=app('auth.password.broker')->createToken($admin);
        Mail::to($admin->email)->send(new AdminResetPassword(['data'=>$admin,'token'=>$token]));
        DB::table('password_resets')->insert([
            'email'=>$admin->email,
            'token'=>$token,
            'created_at'=>Carbon::now()
        ]);
        Session::flash('success','sent');
        return back();
    }
 return back();

}

您可以像这样检查令牌验证:-

public function reset_password($token){

 $check_token= DB::table('password_resets')->where('token',$token)->where('created_at','>',Carbon::now()->subHours(2))->first();
 if(!empty($check_token)){
  return view('admin.reset_password',['data'=>$check_token]);
 }else{
     return redirect('/admin/forgorpassword');
 }

}