Как получить доступ к URL-адресу запроса в методе проверки стратегии http? - PullRequest
1 голос
/ 27 марта 2019

Я хочу получить доступ к объекту контекста, который существует в охранниках, внутри моего метода проверки стратегии переноса.Могу ли я передать его в качестве аргумента вместе с токеном?

bearer-auth.guard.ts:

@Injectable()
export class BearerAuthGuard extends AuthGuard('bearer') {
    canActivate(context: ExecutionContext): boolean | Promise<boolean> | Observable<boolean> {
        return super.canActivate(context);
    }
}

http.strategy.ts:

@Injectable()
export class HttpStrategy extends PassportStrategy(Strategy) {
    constructor(private globalService: GlobalService) {
        super();
    }

    async validate(token: string) {
        const customer = await this.globalService.validateCustomer(token);
        if (!customer) {
            throw new UnauthorizedException();
        }
        return customer;
    }
}

Я хочу что-то вроде этого:

async validate(token: string, context) { // <-- context object as argument
    const customer = await this.globalService.validateCustomer(token);
    if (!customer) {
        throw new UnauthorizedException();
    }
    return customer;
}

1 Ответ

1 голос
/ 27 марта 2019

Вы можете получить доступ к объекту request, передав параметр passReqToCallback: true в passport-http-bearer. Тогда первым параметром в вашем обратном вызове validate будет request:

@Injectable()
export class HttpStrategy extends PassportStrategy(Strategy) {
  constructor(private readonly authService: AuthService) {
    // Add the option here
    super({ passReqToCallback: true });
  }

  async validate(request: Request, token: string) {
    // Now you have access to the request url
    console.log(request.url);
    const user = await this.authService.validateUser(token);
    if (!user) {
      throw new UnauthorizedException();
    }
    return user;
  }
}

Смотрите демо-версию здесь

Edit Nest HTTP Auth

...