我创建了下面的装饰器,以使当前登录到系统用户,
export const CurrentUser = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
return request.user;
},
);
但是我不想使用它,因为我需要在我的任何控制器中使用,这对我来说有点麻烦,因为某些功能是可选的,即对于已登录用户和未登录用户,
因此,service
当我想获取当前用户而不是全部通过控制器中的装饰器获取我的登录功能时,如何获取当前登录用户?
谢谢你的帮助
您必须创建一个自定义提供程序并将请求注入其中。像这样
{
provider: 'CURRENT_USER',
inject: [REQUEST],
useFactory: (req: Request) => {
return req.user;
},
scope: Scope.REQUEST,
}
(REQUEST
是从注入@nestjs/core
)
然后,可以使用将用户注入服务@Inject('CURRENT_USER')
。请记住,这将使服务成为REQUEST
作用域,并且根据作用域层次结构,它将使您将服务注入到REQUEST
作用域中的一切。
该模块的示例如下所示:
@Module({
providers: [{
provider: 'CURRENT_USER',
inject: [REQUEST],
useFactory: (req: Request) => {
return req.user;
},
scope: Scope.REQUEST,
}],
exports: ['CURRENT_USER'],
})
export class CurrentUserModule {}
现在,在具有需要当前用户的服务的任何模块中,
@Module({
imports: [CurrentUserModule],
providers: [ServiceThatNeedsUser],
})
export class ModuleThatNeedsUser {}
并在服务中:
@Injectable()
export class ServiceThatNeedsUser {
constructor(@Inject('CURRENT_USER') private readonly user: UserType) {}
// rest of class implementation
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句