извлечь дату истечения срока действия из jsonwebtoken - PullRequest
0 голосов
/ 03 октября 2019

Насколько токен недействителен, насколько мне известно, лучший способ сохранить токен и дату истечения срока его действия в базе данных. Чтобы проверить его, вам просто нужно выбрать его из базы данных, и если он существует, вы знаете, что он был признан недействительным. Кроме того, вы можете удалить каждый токен с истекшим сроком действия по дате истечения срока его действия из базы данных.

Поэтому я создал промежуточное программное обеспечение, которое извлекает токен из заголовков авторизации, и оно должно прикрепить токен и дату истечения срока действия к объекту request. ,Дата и время требуются для того, чтобы маршрут signOut сделал недействительным токен.

  async use(req: any, res: Response, next: NextFunction) {
    try {
      const headers: IncomingHttpHeaders = req.headers;
      const authorization: string = headers.authorization;
      const bearerToken: string[] = authorization.split(' ');
      const token: string = bearerToken[1];

      if (await this.authenticationsRepository.findByEncodedToken(token)) { // invalidated token?
        throw new Error(); // jump to catch
      }

      req.tokenPayload = verifyToken(token); // calls jwt.verify with secret
      next();
    } catch (error) {
      throw new UnauthorizedException();
    }
  }

Но как я могу извлечь атрибут exp из токена для вычисления времени окончания срока действия?

1 Ответ

6 голосов
/ 03 октября 2019

Чтобы получить дату окончания срока действия, вам нужно декодировать jsonwebtoken и получить доступ к его ключу exp, например, так:

let token = jwt.sign({
    data: 'foobar'
}, 'secret', { expiresIn: '1h' });


var decoded = jwt.decode(token, { complete: true });
console.log(decoded.payload.exp);

В вашем случае вы можете сделать это следующим образом, я думаю:

req.expirationTime = jwt.decode(token, { complete: true }).payload.exp;
...