node使用jwt,如何刷新token
发布于 7 年前 作者 broncoss 13171 次浏览 来自 问答

通过npm install jsonwebtoken安装,调用它的sign可以生成一个具有过期时间的token,使用verify可以验证token是否有效。但是发现该模块不具有refresh token的机制,那么该如何在token过期之前,刷新token?

16 回复

自顶

貌似没法刷新的,我的做法是直接替换,前端在接收到返回头有token,就替换。因此,前端网络层的封装是很重要的,可以统一处理

@zhengguorong 也就是在verify的时候判断下token是否过期,如果过期直接生成一个新的token返回,然后前端用新的token继续访问?

@broncoss 是啊,看你具体设计吧,如果你判断过期就生成给他,那他的状态永远都不过期,我开发的时候token一般还往数据库放一份,这样就可以踢人下线了

@AberGLJ 目的就是想在token过期之前,刷新token

@zhengguorong 也是,那样的话永远都不会过期。那一般怎么解决?

你可以把jwt设置为无expire

@backsapce 那这和用jwt和不用jwt有什么区别呢

直接在生成一次token不行吗

来自酷炫的 CNodeMD

而且token可以包含自定义数据,你可以拿这些数据做很多功能了

来自酷炫的 CNodeMD

@broncoss 你可以做过期判断,如果有效期在1小时以内,就重新生成给前端,如果已经过期了,那就让前端重新登陆。 这样做是为了保证前端用户在正常操作的时候不至于因为token过期被踢出去,同时保证了安全性(不会导致token被嗅探后,被重复利用)

@backsapce 这样就不安全了,因为token有可能会被嗅探,所以需要加上过期时间,但是如果固定过期时间,有可能导致用户访问中途突然失效,因此需要刷新token

@zhengguorong 恩恩,目前的解决方案也是这样。只要在允许的过期范围内,就重新生成一个token。

jwt生成的token实在是太长了,这东西吹的太大了,感觉真不适合做token来使用,尤其是在移动网络下,流量是必须要考虑的一个大问题,这么长的一个token,并且每次网络请求都要带上,太浪费了。倒是觉得做一些简单的数据加密解密倒是蛮适合的。

我的做法是过期时间放在redis,每次访问刷新过期时间。持续访问token就一直不过期。

回到顶部