jwt-simple過期時間不對問題


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM