在使用芋道源码(Ruoyi-Vue-Pro)或基于Spring Security OAuth2的项目时,经常会遇到这样的问题:
- Token 什么时候过期?
- 用户为什么突然被踢下线?
- 登录态到底存在哪?
- Redis 里怎么看 token 剩余有效时间?
本文将通过一步一步实操,教你如何在 Redis 中准确查看 OAuth2 access_token 的过期时间。
一、背景说明:芋道的 Token 存在哪里?
在芋道源码中,登录认证通常有两种方案:
- Sa-Token
- OAuth2(Spring Security OAuth2)
如果你在 Redis 中看到的 key 是:
oauth2_access_token:xxxx那么可以100% 确定:
✅ 当前项目使用的是OAuth2
❌ 不是 Sa-Token
并且:
- access_token 存在 Redis
- 过期时间由 Redis 的 TTL 控制
二、进入 Redis(基础准备)
1️⃣ 连接 Redis
redis-cli如果有密码 / 指定端口:
redis-cli -h127.0.0.1 -p6379-a your_password2️⃣ 注意:Redis 有 DB 概念(非常重要)
Redis 默认有DB 0 ~ DB 15
而芋道经常把 token 放在 DB 1 / DB 2
先查看当前 Redis 中哪些 DB 有数据:
INFO keyspace示例输出:
db0:keys=0,expires=0 db2:keys=180,expires=160说明:token 在 DB 2
切换到对应 DB:
SELECT2三、查找 OAuth2 Token Key
在 Redis 中执行:
keys *token*你会看到类似结果:
oauth2_access_token:4ffcf66f153d48b4aa7b347d16ae474c oauth2_access_token:a7344b41b600419fbd6db1336c72e81c ...说明:
- 每一个 key 对应一个登录用户的 access_token
- key 后面的字符串就是 token 本身
四、查看 Token 的过期时间(核心步骤)
1️⃣ 使用 TTL 命令(单位:秒)
TTL oauth2_access_token:4ffcf66f153d48b4aa7b347d16ae474c返回结果示例:
(integer) 276542️⃣ TTL 返回值含义说明
| 返回值 | 含义 |
|---|---|
> 0 | 剩余有效时间(秒) |
-1 | 永不过期(OAuth2 基本不会) |
-2 | token 不存在 / 已过期 |
3️⃣ 时间换算示例
TTL = 27654 秒换算为时间:
- 27654 秒
- ≈7 小时 40 分 54 秒
👉 说明:
这个 token 还有约 7 小时 41 分钟过期
五、如何确认「当前登录用户」用的是哪个 token?
方法一(最推荐)
1️⃣ 在浏览器 Network / 后端日志中找到请求头:
Authorization: Bearer 4ffcf66f153d48b4aa7b347d16ae474c2️⃣ 把 token 拼到 Redis key 中:
TTL oauth2_access_token:4ffcf66f153d48b4aa7b347d16ae474c这个 TTL 就是当前用户真实的剩余登录时间
六、Token 过期时间是在哪里配置的?
在芋道源码中,OAuth2 的 token 过期时间通常配置在:
yudao:oauth2:access-token-expire-time:28800# access_token 有效期(秒)refresh-token-expire-time:2592000# refresh_token 有效期(秒)其中:
28800 秒 = 8 小时这也是为什么你在 Redis 中看到的 TTL 通常接近 8 小时。
七、常见问题排查总结
❓ keys 查不到 token?
- 没切对 Redis DB
- 连错 Redis 实例
- 项目不是 OAuth2(而是 JWT / Sa-Token)
❓ TTL = -2?
- token 已过期
- 用户被强制下线
- Redis 被清理过
八、总结一句话版本(记住这条就够)
在芋道 OAuth2 项目中,查看 token 过期时间只需要一条命令:
TTL oauth2_access_token:{accessToken}