Насколько токен недействителен, насколько мне известно, лучший способ сохранить токен и дату истечения срока его действия в базе данных. Чтобы проверить его, вам просто нужно выбрать его из базы данных, и если он существует, вы знаете, что он был признан недействительным. Кроме того, вы можете удалить каждый токен с истекшим сроком действия по дате истечения срока его действия из базы данных.
Поэтому я создал промежуточное программное обеспечение, которое извлекает токен из заголовков авторизации, и оно должно прикрепить токен и дату истечения срока действия к объекту 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
из токена для вычисления времени окончания срока действия?