jwt-simple过期时间不对问题
程序员文章站
2022-04-15 20:07:12
今天用node写后台,登录认证使用了token,然后就使用了简单的jwt simple,但是发现设置的过期时间不对,一直没有提示过期,但是明明是已经过期了的时间,于是检查了下jwt simple的源代码。 我的路径,根目录下\node_modules\jwt simple\lib\jwt.js jw ......
今天用node写后台,登录认证使用了token,然后就使用了简单的jwt-simple,但是发现设置的过期时间不对,一直没有提示过期,但是明明是已经过期了的时间,于是检查了下jwt-simple的源代码。
我的路径,根目录下\node_modules\jwt-simple\lib\jwt.js
jwt.decode = function jwt_decode(token, key, noVerify, algorithm) { // check token if (!token) { throw new Error('No token supplied'); } // check segments var segments = token.split('.'); if (segments.length !== 3) { throw new Error('Not enough or too many segments'); } // All segment should be base64 var headerSeg = segments[0]; var payloadSeg = segments[1]; var signatureSeg = segments[2]; // base64 decode and parse JSON var header = JSON.parse(base64urlDecode(headerSeg)); var payload = JSON.parse(base64urlDecode(payloadSeg)); if (!noVerify) { var signingMethod = algorithmMap[algorithm || header.alg]; var signingType = typeMap[algorithm || header.alg]; if (!signingMethod || !signingType) { throw new Error('Algorithm not supported'); } // verify signature. `sign` will return base64 string. var signingInput = [headerSeg, payloadSeg].join('.'); if (!verify(signingInput, key, signingMethod, signingType, signatureSeg)) { throw new Error('Signature verification failed'); } // Support for nbf and exp claims. // According to the RFC, they should be in seconds. if (payload.nbf && Date.now() < payload.nbf*1000) { throw new Error('Token not yet active'); } if (payload.exp && Date.now() > payload.exp*1000) { throw new Error('Token expired'); } } return payload; };
这是解密的函数,发现在最后面
if (payload.exp && Date.now() > payload.exp*1000) { throw new Error('Token expired'); }
这里的时候,多上了1000。。。。。这就尴尬了,然后又看了下加密的,并没有什么除于100的操作。。。这样子怎么可能会过期。。
相对应的要改也就简单了,你可以去掉1000,或者再设置过期时间的时候/1000。