A在B电脑上登录后获得一个token,然后A又在C电脑上登录获得一个token,现在A就有两个token了,这样有什么办法让之前的token失效?否则两台电脑都可以登录,主流办法是怎么解决这个问题的?
A在B电脑上登录后获得一个token,然后A又在C电脑上登录获得一个token,现在A就有两个token了,这样有什么办法让之前的token失效?否则两台电脑都可以登录,主流办法是怎么解决这个问题的?
一般普遍的token存储办法就是在缓存中存储,比如redis,好的,根据你的业务需求,其实也算是最简单的需求了:
token='xxxxx';
// 假设拿到了user编号
userId = 3;
redis.set(token, userId);
我们设置了这个token对应的用户,这是最基本的。现在需要拿到用户上一次的token,那其实没啥含量,反向设置一次即可
token='xxxxx';
// 假设拿到了user编号
userId = 3;
redis.set(token, userId);
// 找到旧的token并删除
oldToken = redis.get('token_map_' + userId);
if (oldToken) {
redis.delete(oldToken);
}
// 覆盖旧的token
redis.set('token_map_' + userId, token);
还有一个方案,就是其实不需要主动删原来的token:
token='xxxxx';
// 假设拿到了user编号
userId = 3;
redis.set(token, userId);
redis.set('current_token' + userId, token);
然后访问接口的时候,第一步判断token是否在redis,第二步判断token与current_token
对应的token是否一致,一致就通过。这样可以巧妙的抛弃原先的token。
不是复杂的账号系统,所以不需要过度设计
难道不是 A 登录后直接用新 token
覆盖掉旧 token
吗?
user.token = newToken
,这样一来旧 Token
自然无法通过验证。
难道你们的业务逻辑允许同一个用户在多个地方同时登录?
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.1k 阅读✓ 已解决
如果只有纯粹的 jwt 的话,做不到覆盖 token 的功能。想要 覆盖token,需要结合 session 来达到,session 可以用 redis甚至直接就sql数据库 去做。。。