Laravel中密码更新后登出无法显示状态消息的问题
问题解决:密码更新后登出无法显示状态消息
问题现象
- 密码修改成功后执行
Auth::logout(),跳转至登录页面后无法显示“密码已更新”的状态消息,但密码确实已修改完成 - 密码不匹配等错误场景可正常返回并显示SweetAlert提示
- 其余代码逻辑均正常运行
问题原因
代码中跳转至user.logout路由,而该路由通常会再次执行登出逻辑(包含session()->invalidate()销毁会话),导致之前通过->with('status')存入会话的状态消息被清空,最终登录页面无法读取到该消息。
解决方案
修改控制器中的成功分支代码,直接跳转至登录页面而非logout路由,同时传递状态消息:
public function UserUpdatePassword(Request $request) { $validateData = $request->validate([ 'oldpassword' => 'required', 'password' => 'required|confirmed', ]); $hashedPassword = Auth::user()->password; if(Hash::check($request->oldpassword, $hashedPassword)){ $user = User::find(Auth::id()); $user->password = Hash::make($request->password); $user->save(); Auth::logout(); // 直接跳转至登录路由,传递状态消息 return redirect()->route('login')->with('status','密码已成功更新'); } else{ Alert::warning('密码不匹配','当前密码错误或确认密码不一致'); return redirect()->back(); } }
补充说明
->with('key', 'value')会将数据存入新会话的闪存中,登录页面的@if(session('status'))逻辑可正常读取- 避免重复执行登出操作,防止会话被多次销毁导致消息丢失
内容的提问来源于stack exchange,提问作者ToddM
相关产品推荐
相关产品推荐

