代码之家  ›  专栏  ›  技术社区  ›  Norgul

Laravel密码代理外观

  •  0
  • Norgul  · 技术社区  · 7 年前

    如何使用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();
    

    但哈希值的结果不正确。

    有人知道如何将其与DB值匹配吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Norgul    7 年前

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

    Hash::check($input['token'], $token->token)
    
        2
  •  0
  •   abdelhakeem qassem    6 年前

    您可以将未删除的令牌插入(password\u 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');
     }
    

    }