
一句话承诺:用时序图和接口示例,快速落地可用的刷新策略,避免“无限续命”。

项目 | 建议 | 说明 |
|---|---|---|
access_token | 15~30分钟 | 短期、体积小 |
refresh_token | 7~30天 | 长期、仅用于刷新 |
黑名单存储 | Redis/DB | 记录已作废refresh_token |
app.post('/auth/refresh', async (req, res) => {
const rt = req.body.refresh_token;
const inBlacklist = await redis.sismember('rt:blacklist', rt);
if (inBlacklist) return res.status(401).json({ message: 'refresh token revoked' });
// 校验rt合法性(省略)
const newAccess = signAccess({ uid: req.user.id }, { expiresIn: '20m' });
const newRefresh = signRefresh({ uid: req.user.id }, { expiresIn: '30d' });
// 黑名单旧refresh
await redis.sadd('rt:blacklist', rt);
res.json({ access_token: newAccess, refresh_token: newRefresh });
});VS Code 写作效率提升:批量占位、片段模板与常用扩展(清单+演示)。