ExecuteContext cannot get User in Class RoleGuard

317 views Asked by At
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' 
    });
  }
}

The reason after return role==="ADMIN" then user can log but how can i get user before return role==="ADMIN execute ? I can get user only after the role==="ADMIN" return only Im using nest js working on RoleGuard

0

There are 0 answers