Laravel密码经纪人门面

问题描述 投票:0回答:2

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

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

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

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

用户的回调URL是password-reset/{token},现在我想检查令牌是否有效,检查它是否存在于DB中,如果用户连接到它,甚至触发了密码重置。

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

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

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

但散列值不正确。

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

php laravel passwords
2个回答
2
投票

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

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

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');
 }

}

© www.soinside.com 2019 - 2024. All rights reserved.