初次尝试 JWT,发现一个账号生成多个 JWT token 后,只要在这些 token 还没过期前都是有效的
例如账号 A 在 15:30 分登录生成了 token0,有效时间为 1 小时,过了 5 分钟账号 A 再次登录生成了 token1 有效时间还是为 1 小时。 这时候 token0 和 token1 都是合法的? 我之前以为 token1 会把 token0 给刷新掉……
那么如何实现一个账号只能同时在一个设备(端)登录呢?想到了如下几种方式:
- 1.将 token 存入 redis,每次登录就刷新 redis 里的 token,这样就能保证 token 永远只有一个(虽然实际上还是有多个,但是我只认 redis 里的这一个)。但是这样的话我就不需要 JWT 了啊,直接 redis 实现就好了
- 2.结合 session,每次登录将 session 写入 token,然后判断当前 session 和 token 里的是否一致。同上面,这样是不是有点冗余了,直接用 session 实现就好了?
- 3.将用户最后一次登录信息写入 token,判断 token 里的登录信息和数据库里最后一次的登录信息是否一致。这样做的话会频繁查询数据库,数据库负载会变高
各位大佬有什么好方法吗?