如何从 nestjs/jwt 令牌中正确提取有效负载?
How to properly extract payload from nestjs/jwt token?
我运行在一个项目中遇到解密令牌的问题,我想从传入的令牌中提取数据,将其与数据库中的数据进行比较,然后执行某些操作。
问题是,当我从“jwtService.decode()”获取有效负载时,我无法访问“decodedJwt.email”字段,nest 抱怨“decodedJwt”不是对象。但是如果你 return typeof "decodedJwt" 那么答案就是一个字符串。但是,我无法访问代码本身的“电子邮件”字段。如果我在此函数中 return "decodedJwt",那么在邮递员中我将获得具有必要字段的非常必要的对象,包括相同的“电子邮件”字段。我的错误是什么?
小窝回复:
属性 'email' 在类型 'string | { [key: string]: any; }' 上不存在。
属性“字符串”类型不存在“电子邮件”。ts(2339)
async refreshTokenByOldToken(authHeader: string) {
const decodedJwt = this.jwtService.decode(authHeader.split(' ')[1])
return decodedJwt.email
}
您需要转换类型。明确说明它是什么类型。
type PayloadType = {
email: string;
}
async refreshTokenByOldToken(authHeader: string) {
const decodedJwt = this.jwtService.decode(authHeader.split(' ')[1]) as PayloadType;
return decodedJwt.email
}
您也可以参考 PayloadType
其他地方,例如在您的服务中而不是 string | { [key: string]: any; }
您可以 string | PayloadType
.
因为您的 decodedJwt 字符串是不同的数据类型。您访问邮箱信息的两种情况;
- 如果你@nestjs/jwt包裹
const decoded: JwtPayload = this.jwtService.decode(yourAccessToken);
const email = decoded.email;
或
Base 64 转换
const base64Payload = authHeader.split(" ")[1];
const payloadBuffer = Buffer.from(base64Payload, "base64");
const updatedJwtPayload: JwtPayload = JSON.parse(payloadBuffer.toString()) as JwtPayload;
const email = updatedJwtPayload.email;
我运行在一个项目中遇到解密令牌的问题,我想从传入的令牌中提取数据,将其与数据库中的数据进行比较,然后执行某些操作。 问题是,当我从“jwtService.decode()”获取有效负载时,我无法访问“decodedJwt.email”字段,nest 抱怨“decodedJwt”不是对象。但是如果你 return typeof "decodedJwt" 那么答案就是一个字符串。但是,我无法访问代码本身的“电子邮件”字段。如果我在此函数中 return "decodedJwt",那么在邮递员中我将获得具有必要字段的非常必要的对象,包括相同的“电子邮件”字段。我的错误是什么?
小窝回复: 属性 'email' 在类型 'string | { [key: string]: any; }' 上不存在。 属性“字符串”类型不存在“电子邮件”。ts(2339)
async refreshTokenByOldToken(authHeader: string) {
const decodedJwt = this.jwtService.decode(authHeader.split(' ')[1])
return decodedJwt.email
}
您需要转换类型。明确说明它是什么类型。
type PayloadType = {
email: string;
}
async refreshTokenByOldToken(authHeader: string) {
const decodedJwt = this.jwtService.decode(authHeader.split(' ')[1]) as PayloadType;
return decodedJwt.email
}
您也可以参考 PayloadType
其他地方,例如在您的服务中而不是 string | { [key: string]: any; }
您可以 string | PayloadType
.
因为您的 decodedJwt 字符串是不同的数据类型。您访问邮箱信息的两种情况;
- 如果你@nestjs/jwt包裹
const decoded: JwtPayload = this.jwtService.decode(yourAccessToken);
const email = decoded.email;
或
Base 64 转换
const base64Payload = authHeader.split(" ")[1]; const payloadBuffer = Buffer.from(base64Payload, "base64"); const updatedJwtPayload: JwtPayload = JSON.parse(payloadBuffer.toString()) as JwtPayload; const email = updatedJwtPayload.email;