今天用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。