首页 > 解决方案 > ExecuteContext 无法获取类 RoleGuard 中的用户

问题描述

import { ROLES_KEY } from './role.decorator';
import { UserRole } from '../users/role.enum';
import { CanActivate, Injectable, ExecutionContext } from '@nestjs/common';
import { Reflector } from '@nestjs/core';

@Injectable()
export class RolesGuard implements CanActivate {
  constructor(private reflector: Reflector) {}
  canActivate(
    context: ExecutionContext,
  ): boolean | Promise<boolean> | Observable<boolean> {
    const requiredRole = this.reflector.getAllAndOverride<UserRole[]>(
      ROLES_KEY,
      [context.getClass(), context.getHandler()],
    );
    if (!requiredRole) {
      return true
    }
    const req = context.switchToHttp().getRequest();
    const user = req.user;
    console.log('Before');
console.log(user)
    return requiredRole.some((role) => {
      if(role==="ADMIN"){
        console.log("True")
      }
      return role === 'ADMIN' 
    });
  }
}

return role==="ADMIN" 然后用户可以登录后的原因,但是我怎样才能在 return role==="ADMIN execute 之前获取用户?我只能在 role==="ADMIN" 返回后才能获取用户我使用嵌套js 在 RoleGuard 上工作

标签: nestjsnestjs-jwt

解决方案


推荐阅读