我在使用 Laravel 9,尝试让用户在进入某个路由前确认密码,但问题是,当用户确认密码后,他们会被重定向回引导至密码确认页面的那个路由,而不是应跳转到的确认密码后的目标路由。
举例来说:
用户通过 GET 方法访问 /settings
路由并更改设置,在更改设置之后,为了保存设置,他们需要通过 POST 方法访问 /settings
路由,而这个 POST 方式的 /settings
路由受密码保护。
实际情况是,用户在 /settings
(GET)路由上更改了设置,当他们尝试通过访问 /settings
(POST)路由来保存设置时,系统会提示他们确认密码。然而,在他们确认密码后,却被重定向回了 /settings
(GET)路由,而非应该用于保存设置的 /settings
(POST)路由。
我参考了 Laravel 9.x 文档,但未能成功解决问题。
根据文档所述,应在 web.php
文件中添加如下代码:
Route::get('/confirm-password', function () {
return view('auth.password.confirm');
})
->middleware('auth')
->name('password.confirm');
Route::post('/confirm-password', function (Request $request) {
if (!Hash::check($request->password, $request->user()->password)) {
return back()->withErrors([
'password' => ['提供的密码与我们的记录不符。']
]);
}
$request->session()->passwordConfirmed();
return redirect()->intended();
})
->middleware(['auth', 'throttle:6,1']);