logout如果一个用户要保持其它 的login的refresh-token

发布时间:2026/7/18 19:03:37

logout如果一个用户要保持其它 的login的refresh-token
这通常是一个多设备登录管理的需求即用户在退出当前设备时希望不影响其他已登录设备手机、平板、其他浏览器的会话。要让你的logout接口实现这个效果关键在于区分“退出登录”与“撤销所有凭证”。以下是具体的实现策略1. 核心逻辑建立“设备指纹”映射不要只把refresh_token与用户 ID绑定而要绑定到用户 ID 设备ID。生成设备ID在每次登录时服务端生成一个唯一标识如device_id并将其返回给客户端或存入客户端 Cookie。存储结构在数据库或 Redis 中存储refresh_token时使用复合主键(user_id, device_id)或存储映射关系user_id - [device_id_1, device_id_2]。2. 注销接口Logout的实现调整当用户只点击“退出当前设备”时你的logout接口应该执行以下操作go// 伪代码示例 func LogoutHandler(c *gin.Context) { // 1. 获取当前请求携带的 refresh_token token : c.GetHeader(Authorization) // 2. 解析 token获取其中的 user_id 和 device_id claims : parseToken(token) userId : claims.UserID deviceId : claims.DeviceID // 关键必须从 token 载荷中读取 // 3. **关键操作**仅删除该特定 (user_id, device_id) 对应的 refresh_token err : redisClient.Del(ctx, fmt.Sprintf(refresh:%s:%s, userId, deviceId)) // 4. 返回成功客户端清除本地的 token // 此时数据库/Redis 中仍保留着其他设备的 refresh_token它们依然有效 }3. 存储方式建议以 Redis 为例为了支持快速删除单个设备推荐使用Hash或String 索引结构Key 设计refresh:{user_id}:{device_id}优点删除时只需精准DEL这个 Key不影响其他 Key。缺点如果想“一键踢出所有设备”需要遍历所有 Key。辅助索引用于“踢出所有设备”如果你还想保留“注销所有设备”的功能可以再维护一个 SetKey:user_devices:{user_id},Value:[device_id_1, device_id_2]单设备登出DEL refresh:user:device1不移除 Set 里的记录也可以旧设备下次用旧 ID 登录会覆盖。全部登出遍历 Set删除所有refresh:user:*。4. 签发 Token 时的改造在登录/刷新 Token 的接口中你需要将device_id写入 JWT 的 Payload 中go// 生成 token 时 claims : jwt.RegisteredClaims{ Subject: userID, ID: deviceID, // 将设备ID存入JTI或自定义字段 ExpiresAt: jwt.NewNumericDate(time.Now().Add(7 * 24 * time.Hour)), }这样当Logout接口收到请求时直接从请求头解析出的 Token 里拿到device_id就知道当前操作的是哪台设备了。5. 客户端前端的配合服务端返回 200 OK 后前端清除本地存储的access_token和refresh_token。注意服务端删除的是该设备的refresh_token但其他设备浏览器里的access_token可能还没过期。由于access_token是无状态的如果其他设备拿着旧的access_token请求资源依然会通过只有当该设备需要刷新令牌refresh_token已失效或强制访问需要最新权限的接口时才会要求重新登录。这是一种常见的折中方案。总结方案对比场景操作方式对其他设备的影响单设备退出你的需求精准删除refresh_token记录的WHERE user_id ? AND device_id ?无影响其他设备正常使用修改密码/账号异常批量删除DELETE FROM tokens WHERE user_id ?所有设备均需重新登录服务端无状态 JWT不存库将(user_id, device_id)加入 Redis 黑名单其他设备可能因黑名单匹配而失效需谨慎设计黑名单 Key推荐做法使用上述“存储型 Refresh Token Device ID”方案。这是目前业界如 OAuth 2.0 的device_id参数比较成熟的做法能完美实现“退出当前设备而不影响其他设备”。如果你需要更详细的代码示例比如 Gin Redis 的具体实现或者想了解如何实现“一键踢出所有设备”的反向操作可以告诉我我继续补充。

相关新闻

【限时解密】某头部AIGC平台2026内测副业通道:仅开放给持有NLP基础认证+100小时标注经验者(附3天速通备考路线)

【限时解密】某头部AIGC平台2026内测副业通道:仅开放给持有NLP基础认证+100小时标注经验者(附3天速通备考路线)

2026/7/18 19:03:37

更多请点击: https://intelliparadigm.com 第一章:AI副业 2026新机会 随着大模型轻量化、边缘AI芯片普及与开源生态爆发式演进,2026年AI副业已从“技术极客专属”转向“可规模化交付的微型服务经济”。开发者无需自建训练集群,即…

2026大模型GEO站点结构:3个层级逻辑提收录,零成本提32%抓取权重附架构表

2026大模型GEO站点结构:3个层级逻辑提收录,零成本提32%抓取权重附架构表

2026/7/18 18:53:36

作者:张钧泽(曌选科技GEO优化主理人,20生产级RAG/GEO项目经验)做GEO优化的企业普遍有个认知误区,觉得只要内容质量够好,就一定会被大模型收录,实际上恰恰相反。 张钧泽(曌选科技GEO优…

Linus说内核不反AI工具——但做嵌入式18年的我告诉你,AI写的驱动你敢用吗?

Linus说内核不反AI工具——但做嵌入式18年的我告诉你,AI写的驱动你敢用吗?

2026/7/18 18:53:36

Linus说内核不反AI工具——但做嵌入式18年的我告诉你,AI写的驱动你敢用吗?一句话观点:Linus说内核不反AI是对的,但AI生成的驱动代码在嵌入式场景下风险比互联网后端高两个数量级——内核社区要管的不应该是"能不能用AI"…

使用PLUS过程中遇到的问题

使用PLUS过程中遇到的问题

2026/7/18 20:33:40

GPT Plus 对开发人员非常友好,但是中途会遇到一些问题,接下来盘点一下可能会遇到的问题,帮助大家避坑!! 1、保持网络环境稳定,这一点很重要 2、想用PLUS但是苦于没有国外的卡,这部分我后期补充…

从业心得:一次性涌入上万条线索,企业最稳的获客打法是什么?

从业心得:一次性涌入上万条线索,企业最稳的获客打法是什么?

2026/7/18 20:33:40

做企业营销和拓客这么多年,我发现一个非常扎心的行业通病:绝大多数公司的获客困境,都卡在“线索和人力不匹配”上。 线索少的时候,销售没客户跟进,团队不稳定、业绩上不去;可一旦渠道投放起量、活动引流爆单…

本地进程缓存

本地进程缓存

2026/7/18 20:33:40

本地进程缓存时使用本地的JVM资源去存储数数,减少数据库和redis等中间件的压力,并且远程中间件与进程之间传输数据会经过网络传输,会影响一定的性能,为了加快数据响应提高用户使用体感,我们可以引入本地进程缓存来加快…

2026 烘箱烤炉传感器怎么选 M50稳定运行3年零故障案例

2026 烘箱烤炉传感器怎么选 M50稳定运行3年零故障案例

2026/7/18 20:33:40

深圳某锂电池模组制造企业,主要为国内 top5 新能源汽车厂商供应电池 Pack。## 前言 在锂电池制造过程中,烘箱产线扮演着至关重要的角色。电池模组在组装后需要经过高温烘烤工序,以固化胶水、去除水分、确保电芯之间的紧密粘合,这对…

【桁架】基于matlab三维桁架优化以实现最大刚度【含Matlab源码 15893期】含报告

【桁架】基于matlab三维桁架优化以实现最大刚度【含Matlab源码 15893期】含报告

2026/7/18 20:33:40

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…

黑灯工厂中AI视觉检测的实现条件——AI检测的检出边界与工程原理

黑灯工厂中AI视觉检测的实现条件——AI检测的检出边界与工程原理

2026/7/18 20:23:40

黑灯工厂中检测工位的无人化依赖设备的自动亮度监测、自动相机校准和次品收集的自动切换三个条件。AI检测的检出边界由光源方案决定,只能检表面可见的缺陷。以下以磁材企业和密封件集团的设备方案为样本做分析。黑灯运行的光源自动监测LED光源在数万小时工作后亮度衰…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/18 14:07:00

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/17 17:34:09

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/18 5:51:23

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

2026/7/18 0:02:02

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

2026/7/18 0:02:02

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

某智驾大牛创业

某智驾大牛创业

2026/7/18 0:02:02

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…