【问题标题】:Route for resetting password in Laravel 7Laravel 7 中重置密码的路径
【发布时间】:2021-02-21 02:22:44
【问题描述】:

我在 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 

路线(经过一些研究)

Route::get('reset/{tokenname}{email}','LoginController@resetpassword');

控制器

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

【问题讨论】:

  • 到目前为止你尝试了什么?
  • @KamleshPaul 我没有。因为我不知道
  • 否则,我会在问题本身中提到
  • 与其向我们展示您是如何生成该链接的(我认为这是可行的),为什么不向我们展示您迄今为止在定义路线时所做的尝试?您可能可以从该路由中的$request->email 访问电子邮件参数,并使用它来获取用户及其密码重置令牌。你试过这样做吗?
  • @KamleshPaul 我用routescontroller 更新了我的答案

标签: laravel


【解决方案1】:

你的路线应该是:

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}}" />

您的实际密码重置处理程序可能会在如下路径中定义:

Route::post('reset', 'LoginController@doPasswordReset');

方法体是(部分代码从laravel source借用):

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?
}

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

【讨论】:

  • 我现在明白了。令牌值为5199667639cfc4f5ea624f4c18dbf7e8-vJcnLSH92vAj1IlnV3j7phT8zBtcbX0gSDbjXX37oFsuEM560oAiehZ4oVd0?email=basish%40gmail.com。我想像这样 token =*5199667639cfc4f5ea624f4c18dbf7e8-vJcnLSH92vAj1IlnV3j7phT8zBtcbX0gSDbjXX37oFsuEM560oAiehZ4oVd0* 和 email = baseh%40gmail.com 将令牌和电子邮件分开
猜你喜欢
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 2016-07-14
  • 1970-01-01
相关资源
最近更新 更多