【发布时间】:2020-02-01 16:32:24
【问题描述】:
要使令牌无效,据我所知存储令牌的最佳方式是数据库的到期日期时间。要验证它,您只需从数据库中选择它,如果它存在,您就知道它已失效。此外,您可以通过数据库中的过期日期时间删除每个过期的令牌。
所以我创建了一个从授权标头中提取令牌的中间件,它应该将令牌和到期日期时间附加到 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 属性来计算到期日期时间?
【问题讨论】:
-
你能添加一个相关字符串的例子吗?
-
抱歉
relevant strings是什么意思?你的意思是一个 jwt 示例字符串? -
headers.authorization中到底是什么?这个问题听起来主要是关于字符串解析,而不是关于令牌或到期日期。 -
啊好吧,
headers.authorization只是请求对象的授权标头 :) 但您可以忽略它并从token开始。它将包含从标头中提取的令牌字符串
标签: javascript node.js jwt nestjs