我是 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 的东西,所以我不需要服务类的方法:)
我正在向您寻求更好的解决方案:)
谢谢你。