laravel - Laravel 7 中重置密码的路径
问题描述
我正在使用 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');
}
- 我将如何定义我的路线?我有点困惑,因为我的链接同时包含密码重置令牌和电子邮件 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}}" />
并且您的实际密码重置处理程序可能会在如下路线中定义:
Route::post('reset', 'LoginController@doPasswordReset');
并且方法体将是(从laravel 源代码的某些部分借用的代码):
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 在进行实际密码重置之前可以通过提供的电子邮件和密码验证用户。
推荐阅读
- css - 无法摆脱右边的填充
- python-3.x - Python not working after installing numpy
- windows - How to delete registry entry with batch command?
- powerbi - 每月单独计算的 YTD 度量
- javascript - react-native 导航返回时重新运行功能
- javascript - Conflict on JS files after combining Material Design Lite and Bootstrap 4
- r - 可以将前一行值按两个不同的列分组吗?
- python - django 模型 - 检查具有匹配属性的模型是否已存在于数据库中的实例方法
- java - Android:ZipFile() java.util.zip.ZipException:文件太短而不能成为 zip 文件:0
- javascript - Do implementations of the Web Audio API tend to make full use of available CPU cores?