Laravel 登录和注册:让其它设备上的会话失效
在Laravel框架中,如果你想要在用户更改密码或登录不同设备时使得其他设备上的会话失效,你可以使用以下方法:
- 在用户登录时,检查用户是否已在其他设备上登录,并使其他会话失效。
- 当用户更改密码时,应当使所有会话失效。
以下是实现这些功能的示例代码:
// 在 AuthController 或相关控制器中的 login 方法里面添加
if (Auth::attempt($credentials)) {
$user = Auth::user();
// 检查是否有其他会话并使其失效
$this->invalidateOtherSessions($user, $request);
// 其他登录成功后的操作...
}
// 修改密码时使当前会话之外的会话失效
public function changePassword(Request $request)
{
// 验证密码等逻辑...
// 更新用户密码
$user->password = bcrypt($request->new_password);
$user->save();
// 使所有会话失效
$user->sessions()->where('id', '!=', session()->getId())->delete();
// 其他相关操作...
}
// 使其他会话失效的辅助函数
protected function invalidateOtherSessions($user, $request)
{
// 获取当前会话ID以排除
$currentSessionId = session()->getId();
// 删除其他会话
$user->sessions()->where('id', '!=', $currentSessionId)->delete();
// 如果是其他设备登录,可以发送消息或者邮件通知当前设备登出
// ...
}
确保你的 User
模型中有 sessions
关系定义,例如:
class User extends Authenticatable
{
// ...
public function sessions()
{
return $this->hasMany(Session::class);
}
// ...
}
以上代码假设你有一个 sessions
表来存储用户会话信息,并且在用户登录时有相应的记录。如果你的设置不同,你可能需要调整代码以适应你的数据库结构。
评论已关闭