[英]NestJS - current auth user but not via decorator
我創建了下面的裝飾器來獲取當前登錄到系統用戶,
export const CurrentUser = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
return request.user;
},
);
但我不想使用它,因為我需要在我的任何 controller 中使用這對我來說有點麻煩,因為有些功能是可選的,即對於登錄用戶和未登錄用戶,
那么,當我想獲取當前用戶而不是全部通過 controller 中的裝飾器時,如何在我的service
中獲取當前登錄用戶?
謝謝你的幫助
您必須創建一個自定義提供程序並將請求注入其中。 像這樣的東西
{
provider: 'CURRENT_USER',
inject: [REQUEST],
useFactory: (req: Request) => {
return req.user;
},
scope: Scope.REQUEST,
}
( REQUEST
從@nestjs/core
注入)
然后可以使用@Inject('CURRENT_USER')
將用戶注入到服務中。 請記住,這將使服務REQUEST
作用域,並且通過scope 層次結構,它將使您將服務注入到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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.