【发布时间】:2021-06-08 23:51:41
【问题描述】:
我是 NestJS 的新手,正在尝试做身份验证系统。我能够做到。所以这就是我正在做的事情来获得身份验证。
在我的控制器中
@Get('/user')
async getUser(@AuthUser() token: string) : Promise<Object> {
return this.authService.getUser(token)
return token
}
我在这里传递了一个 AuthUser 装饰器,我想避免传入控制器。
在authService.getUser 方法中我有这样的东西
async getUser(token: string): Promise<Object> {
try {
const user = await this.jwtService.verifyAsync(token)
return user
} catch (error) {
return false
}
}
我的装饰器看起来像这样
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
export const AuthUser = createParamDecorator(
(data = 'u_ses', ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
return data ? request.cookies?.[data] : request.cookies;
},
);
我不喜欢代码。如果我需要从服务类或需要传递令牌并获取令牌的任何地方知道用户 ID,我需要使用 @AuthUser() token: string)
所以我想做这样的事情
this.authService.getUser(),这里我不想传递令牌或任何东西,应该能够从任何地方访问这个getUser 方法。由于它是一个服务类,我可以注入和使用它,但我不会拥有令牌。
我尝试在服务类中注入装饰器,但这不起作用。
我更喜欢的一个最佳解决方案是在装饰器中使用 JWT 的东西,所以我不需要服务类的方法 :)
我正在向您寻求更好的解决方案:)
谢谢。
【问题讨论】:
标签: authorization nestjs nestjs-jwt