NestJS-当前的身份验证用户,但不通过装饰器

马克·旺卡

我创建了下面的装饰器,以使当前登录到系统用户,

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作用域中的一切

编辑2/15/21

该模块的示例如下所示:

@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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

nestjs中的可选身份验证

使用 nestjs 身份验证时身份验证失败

Nestjs扩展/合并装饰器?

如何在 NestJS 控制器处理程序的请求中获取“已验证主体”和“经过身份验证的用户”?

URL输入验证NestJs

Nestjs,无法验证jwt

NestJS - 从 Guard 访问用户

如何在 NestJS 中使用基本身份验证?

通过``passport-jwt''与Auth0进行NestJS身份验证

不通过授权(设计身份验证令牌)

14.04不通过chsh命令进行身份验证

无法在 NestJS 服务中使用装饰器

Nestjs applyDecorators用于多个装饰器

如何处理 NestJS @Get() 装饰器?

NestJS / NodeJS / Passport / JWT - 股票当前用户

NestJS 事件发射器

如何在不通过用户身份验证的情况下从Instagram获取用户的媒体?

NestJS在通过JWT认证的GraphQL解析器中获取当前用户

不通过身份验证就可以从PHP读取Google+用户名吗?

我应该使用中间件还是使用防护来通过Auth0和nestjs进行身份验证?

使用 JWT 策略的 NestJs 身份验证 - 添加“ignoreNotBefore”的验证选项

从类装饰器中访问注入的服务?打字稿/ NestJS

NestJS-如何使用装饰器创建嵌套模式

NestJS-如何使用@Body()装饰器访问帖子正文?

NestJS和TypeORM的交易-装饰器和单元测试

NestJs - 从自定义装饰器内的服务调用方法

e2e测试中的NestJS模拟JWT身份验证

Nest.js中具有@ nestjs / passport的可选身份验证

如何验证nestjs中的数字数组?