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天速通备考路线)

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

2026/10/25 10:37:20 阅读更多 →
Coze变量调试黑盒破解:Chrome DevTools联动Memory Inspector实时追踪,3分钟定位记忆丢失根因

Coze变量调试黑盒破解:Chrome DevTools联动Memory Inspector实时追踪,3分钟定位记忆丢失根因

更多请点击: https://intelliparadigm.com 第一章:Coze变量与记忆功能的底层机制解析 Coze 平台中的变量与记忆并非简单的键值缓存,而是基于会话上下文(Session Context)与 Bot 生命周期协同管理的双层状态系统。其核…

2026/10/25 6:47:38 阅读更多 →
031-ArkTS数据持久化方案选型

031-ArkTS数据持久化方案选型

ArkTS 数据持久化方案选型 — RDB / Preferences / KVStore 对比 一、引言 数据持久化是应用开发中不可或缺的一环,它决定了用户数据的存储可靠性、访问效率和跨设备同步能力。鸿蒙系统(ArkData)提供了三种主要的数据持久化方案&#xff1a…

2026/10/24 6:18:01 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/27 4:06:49 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/27 7:21:53 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/27 18:20:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/27 6:20:47 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/27 4:06:50 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 7:21:50 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 19:19:37 阅读更多 →