繁体   English   中英

用户在 context.switchToHttp().getRequest() nestjs 上未定义

[英]User is undefined on the context.switchToHttp().getRequest() nestjs

我是 nestJs 的新手,我需要添加对应用程序的基于角色的访问权限,所以我遵循了文档,但在执行上下文中用户不存在。 如果您需要更多代码,我似乎无法在这里找到问题 github repo: https://github.com/anjula-sack/slinc-backend

角色.guard.ts

import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { ROLES_KEY } from 'src/decorators/roles.decorator';
import Role from 'src/util/enums/role.enum';

@Injectable()
export class RolesGuard implements CanActivate {
  constructor(private reflector: Reflector) {}

  canActivate(context: ExecutionContext): boolean {
    const requiredRoles = this.reflector.getAllAndOverride<Role[]>(ROLES_KEY, [
      context.getHandler(),
      context.getClass(),
    ]);
    if (!requiredRoles) {
      return true;
    }
    const { user } = context.switchToHttp().getRequest();
    console.log(context.switchToHttp().getRequest().req);

    return requiredRoles.some((role) => user.type === role);
  }
}

app.controller.ts

  @UseGuards(JwtAuthGuard, RolesGuard)
  @Get('me/business')
  @Roles(Role.ADMIN)
  getBusiness(@Request() req) {
    return this.usersService.getUserBusiness(req.user.id);
  }

从代码中,我认为您正在混合全局和本地警卫

app.module.ts中,以下代码用于注册全局守卫。 app.useGlobalGuard()如果你想全局应用防护,应该一起使用。

// Remove the following code in app.module.ts
{
    provide: APP_GUARD,
    useClass: RolesGuard,
}

但是你的意图应该是建立一个本地角色守卫,所以请删除上面的代码,请求用户将工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM