在Laravel 7中重置密码的路线

在Laravel 7中重置密码的路线,laravel,Laravel,我正在使用Laravel 7中的自定义密码重置选项。当用户单击重置密码按钮(在其电子邮件的收件箱中)时,用户将重定向到密码重置链接。这是我的链接 http://localhost/LaraTest/public/reset/5199667639cfc4f5ea624f4c18dbf7e8-vJcnLSH92vAj1IlnV3j7phT8zBtcbX0gSDbjXX37oFsuEM560oAiehZ4oVd0?email=basish%40gmail.com 下面是生成链接的代码 $token1=

我正在使用Laravel 7中的自定义密码重置选项。当用户单击重置密码按钮(在其电子邮件的收件箱中)时,用户将重定向到密码重置链接。这是我的链接

http://localhost/LaraTest/public/reset/5199667639cfc4f5ea624f4c18dbf7e8-vJcnLSH92vAj1IlnV3j7phT8zBtcbX0gSDbjXX37oFsuEM560oAiehZ4oVd0?email=basish%40gmail.com

下面是生成链接的代码

$token1=   md5($fp_email);
    $token2 =   Str::random(60);
    $fp_token = $token1."-".$token2;
//some more codes here
$link = 'localhost/LaraTest/public/reset/' . $fp_token . '?email=' . urlencode($fp_email);

//$link is sent to user as email 
路线(经过一些研究)

控制器

public function resetpassword(Request $request){
     
     return view('resetpassword');
     
}
  • 我将如何定义我的路线?我有点困惑,因为我的链接包含 密码重置令牌电子邮件id
  • 重定向到新密码表单后,如何从上面的链接检索密码重置令牌电子邮件id
  • 你的路线应该是:

    Route::get('reset/{tokenname}','LoginController@resetpassword');
    
    然后在实际处理程序中:

    public function resetpassword(Request $request, $token){     
         $email = $request->email;
         return view('resetpassword', compact('token', 'email');    
    }
    
    在您看来,您可以:

        <input type="hidden" name="email" value="{{$email}}" />
        <input type="hidden" name="token" value="{{$token}}" />
    
    方法主体将是(代码借用了


    这将确保Laravel可以在进行实际密码重置之前,通过提供的电子邮件和密码验证用户。

    到目前为止您尝试了什么?@KamleshPaul我还没有。因为我没有其他的线索,我会在问题中提到它自己,而不是向我们展示你是如何生成链接的(我认为这是可行的),为什么不向我们展示你迄今为止在定义路线方面所做的努力呢?您可能可以从该路由中的
    $request->email
    访问电子邮件参数,并使用该参数获取用户及其密码重置令牌。你试过了吗?@KamleshPaul我用
    routes
    controller
    更新了我的答案,我现在明白了。令牌值为
    5199667639cfc4f5ea624f4c18dbf7e8-vJcnLSH92vAj1IlnV3j7phT8zBtcbX0gSDbjXX37oFsuEM560oAiehZ4oVd0?email=basish%40gmail.com
    。我想将令牌和电子邮件分开,比如令牌=*5199667639cfc4f5ea624f4c18dbf7e8-vJcnLSH92vAj1IlnV3j7phT8zBtcbX0gSDbjXX37oFsuEM560oAiehZ4oVd0*和电子邮件=basish%40gmail.com
        <input type="hidden" name="email" value="{{$email}}" />
        <input type="hidden" name="token" value="{{$token}}" />
    
    Route::post('reset', 'LoginController@doPasswordReset');
    
    public function doPasswordReset(Request $request){   
         $validatedRequest = $request->validate([
                'token' => 'required',
                'email' => 'required|email',
                'password' => 'required|confirmed|min:8',
            ]);  
         $email = $request->email;
         $token = $request->token;
         $broker = app(PasswordBrokerManager::class);
         
         $response = $broker()->reset(
                $validatedRequest, function ($user, $password) {
                     // save new password here
                }
            );
    
            return $response == Password::PASSWORD_RESET
                        ? // Reset response?
                        : // Reset failed response?
    }