Laravel 8 清空邮箱密码删除管理员时如何强制该账号立即登出
问题原因
你调用的Auth::logout()方法默认不接收用户实例参数,作用仅为登出当前发起请求的登录用户,完全不会影响你指定的目标管理员的登录状态,这就是登出逻辑不生效的核心原因。
修复方案
你需要主动清除目标管理员的所有有效登录会话,根据你项目使用的会话驱动可以选择对应方案:
- 若使用database会话驱动:直接删除sessions表中该用户的所有会话记录即可
// 放在更新用户信息之前或者之后都可以 DB::table('sessions')->where('user_id', $id)->delete(); - 若使用file、redis等其他会话驱动:更新用户信息时同步清空
remember_token字段,Laravel的登录校验逻辑会自动判定该账号所有现有登录状态失效Admin::findOrFail($id)->update([ 'type' =>3, 'email'=>"", 'password'=>"", 'remember_token' => null // 新增这行 ]);
修正后的完整代码
use Illuminate\Support\Facades\DB; // 头部引入DB门面,如果用database会话驱动才需要加 public function DeleteAdminRole($id){ $admin = Admin::findOrFail($id); $img = $admin->profile_photo_path; if($img){ unlink($img); } // 删目标用户的所有会话,用database驱动的话保留这行,其他驱动可以删掉 DB::table('sessions')->where('user_id', $id)->delete(); $admin->update([ 'type' =>3, 'email'=>"", 'password'=>"", 'remember_token' => null ]); $notification = array( 'message' => 'Admin User Deleted Successfully', 'alert-type' => 'info' ); return redirect()->back()->with($notification); } // end method
注意事项
- 原代码中的
Auth::logout($adminimg);要删掉,否则会把当前操作这个删除功能的管理员自己登出 - 要确保你的用户模型和数据库表中允许email、password字段为空,避免更新时报校验或者字段约束错误
内容的提问来源于stack exchange,提问作者ALAA ELDIN
相关产品推荐
相关产品推荐

