Laravel单点登录和多端认证源码如何编写?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1170个文字,预计阅读时间需要5分钟。
由于默认行为仅清除当前会话,不触及数据库中的+session+记录或其他设备的+token+,Laravel的+session+驱动(如file或redis)本身不提供跨设备会话管理能力。+logout()+函数仅删除当前请求绑定的session ID对应的数据,其他设备仍然可能持有旧的token进行访问。
常见错误现象:Auth::logout() 后,手机端或另一个浏览器仍能正常调用 API、访问受保护路由;后台查 personal_access_tokens 表发现旧 token 还在且未过期。
- 必须主动失效所有该用户的 token,不能只依赖 session 清除
- 如果用的是 Sanctum,要删
personal_access_tokens表中对应tokenable_id和tokenable_type的记录 - 如果用 Passport,得调用
$user->tokens()->delete(),而不是只删当前 token - 注意:删 token 后,正在使用的 API 请求会在下一次验证时失败(401),但不会“实时中断”已建立的连接
Sanctum 实现单点登录:覆盖 createToken() 并清理旧 token
Sanctum 默认允许一个用户无限创建 token,不做互斥控制。要实现单点登录,得在生成新 token 前,把该用户所有已有 token 干掉——这是最直接、副作用最小的做法。
使用场景:App 登录、网页登录共用同一套 Sanctum token 体系,要求新登录即作废旧登录。
本文共计1170个文字,预计阅读时间需要5分钟。
由于默认行为仅清除当前会话,不触及数据库中的+session+记录或其他设备的+token+,Laravel的+session+驱动(如file或redis)本身不提供跨设备会话管理能力。+logout()+函数仅删除当前请求绑定的session ID对应的数据,其他设备仍然可能持有旧的token进行访问。
常见错误现象:Auth::logout() 后,手机端或另一个浏览器仍能正常调用 API、访问受保护路由;后台查 personal_access_tokens 表发现旧 token 还在且未过期。
- 必须主动失效所有该用户的 token,不能只依赖 session 清除
- 如果用的是 Sanctum,要删
personal_access_tokens表中对应tokenable_id和tokenable_type的记录 - 如果用 Passport,得调用
$user->tokens()->delete(),而不是只删当前 token - 注意:删 token 后,正在使用的 API 请求会在下一次验证时失败(401),但不会“实时中断”已建立的连接
Sanctum 实现单点登录:覆盖 createToken() 并清理旧 token
Sanctum 默认允许一个用户无限创建 token,不做互斥控制。要实现单点登录,得在生成新 token 前,把该用户所有已有 token 干掉——这是最直接、副作用最小的做法。
使用场景:App 登录、网页登录共用同一套 Sanctum token 体系,要求新登录即作废旧登录。

