如何从令牌获得userId ?



我正在编写一个简单的get端点,并从前端报头发送令牌信息。但在后端我需要使用userId。我认为它是可用的令牌,但我如何从令牌获得userId ?

// React Front End service
const response = await fetch(
`${process.env.REACT_APP_API_HOST}/export-data/pdf?${urlParams}`,
{
headers: {
...authService.authHeader(),
Authorization: `Bearer ${authService.getToken()}`,
},
}
);
// Nestjs Back End controller
@UseGuards(AuthGuard)
@Permissions('admin')
@Get('/pdf')
async exportDataPdf(@Query() query: GetOrdersFilterDto): Promise<any> {
// I need to use userId from token here.
return await this.exportDataService.exportDataPdf(query);
}

这取决于您在签名用户/生成jwt令牌时如何签名this.jwtService.sign()

例如如果你使用

this.jwtService.sign({ userId: user._id });

然后你可以在你的控制器上做这个

@Get('profile')
getUserId(@Request() req: any) {
return req.user.userId;
}

注意req.user对象被nestjs内部使用来存储jwt有效负载数据。

如果你想要任何你在jwt上提供的数据在一个nestjs保护。您也可以从req对象中访问它。

canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
const [req] = context.getArgs();
// console log user ID
console.log(req.user.userId);
// create your conditional logic here before return true
return true;
}

您可以创建一个称为getUserIdFromToken的方法并使用它。如果使用bcrypt从电子邮件中创建令牌,则可以从中获得电子邮件。下面是我在node:

中的做法
  • 编码令牌
const hashData = { email: user.email }
const accessToken = jwt.sign(hashData, process.env.ACCESS_TOKEN_SECRET)
  • 解码令牌
const email = jwtDecode(token).email;

然后,您可以检索用户与电子邮件。

最新更新