Jsonwebtoken работает не так, как ожидалось, срок действия JWT истек

#javascript #express #jwt

#javascript #экспресс #jwt

Вопрос:

Здравствуйте, могу ли я помочь с этим, кажется, я не могу понять, почему я всегда получал ошибку TokenExpiredError: jwt expired , я только что создал токен.

Вот что я хотел сделать.

1.) когда пользователь вошел в систему, ответ содержит accessToken и refreshToken

2.) вызывайте auth / token каждые 30 секунд для создания нового accessToken.

api аутентификации / токена примет refresh_token в качестве данных запроса и accessToken в качестве авторизации на предъявителя, однако я всегда получал jwt expired . Сбой промежуточного программного обеспечения аутентификации.

Однако, когда я использовал accessToken, который я получил от logged in api, я получил jwt expired ошибку.

JWT Service

 sign(payload, expiresIn = '15m') {
  return jwt.sign(payload, this.privateKey, {
    algorithm: 'RS256',
    expiresIn,
  });
}

verify(token) {
   return jwt.verify(token, this.publicKey, { algorithms: ['RS256'] });
}
  

Controller.js

  // login api
login(req, res, next) {
const { body: { email, password } } = req;

this.accountService.findByEmail(email)
  .then(async (data) => {

    const accessToken = this.jwtService.sign({ data}, '2m');
    const refreshToken = this.jwtService.sign({ data}, '1h');

    return res.send(new SuccessResponse(200, {accessToken, refreshToken}));
  })
  .catch((error) => {
    next(error);
  });
 }
}


 // auth/token api
 authToken(req, res, next) {
     const { body: { refresh_token } }= req;
     const payload = { refresh_token };
     const newAccessToken = this.jwtService.sign({ payload }, '1m', 'RS256');
 }
  

authenticate.middleware.js

 export const authenticate = (req, res, next) => {
  const authorizationBearer = req.get('authorization');
  const accessToken = authorizationBearer.replace('Bearer ', ''); 
  const decodedData = jwtService.verify(accessToken);

  if (decodedData) {
     next();
  }
}
  

Я что-то пропустил или сделал что-то не так?

Используемая библиотека:

jsonwebtoken: 8.5.1
express: 4.17.1

Комментарии:

1. как выглядит фактический токен?

2. @jps что-то вроде этого eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbXBEYXRhIjp7ImVtYWlsIjoiYWRtaW5AZ21haWwuY29tIiwiYWNjb3VudF9pZCI6IjVmNTBjMTIwNDhlZmIxMDZlOTk5ZThlNSJ9LCJpYXQiOjE1OTkzMDcyNzIsImV4cCI6MTU5OTMwNzU3Mn0.r09RrfUjjJCm3ZyZ71xuN9U8o-1xR4s_Kt_ir6OQ6CkBuewPJiExiN_MgnFuTIf74M_r6q4auzpErE6hWfJL49UCNPX_zb9cN8DafaCmScfxz1JIGtBoD22sCcs7id8Td1rsLt3VBfP65OCdkkukXHNg0ccvrhO-VdbjFGmUhNYnudrHdCEpz59_3HkXjklQqn8Yh--fYX2Ds0pSUy8yfs3knBJIz4GD4wLoyP9bwxVaqo-IVLX-sEtzQUv3J_9wT7YlYdZGPoVxWSJwmxXMLP42ILKuh_9x1Ekpa7t54wQ6cqxkq6tjp6d7g0TNlaigoXc2dDCJ_wArDOZPcHvuxg

3. Формат правильный, поэтому я не знаю, почему я всегда получаю ошибку Jwt с истекшим сроком действия

4. хорошо, exp и iat выглядят нормально.

5. да, я уже несколько часов здесь, но я все еще не мог понять, чего мне не хватает.