Охранник не выполняет паспортную стратегию в гнездах - PullRequest
0 голосов
/ 07 февраля 2019

Я использую nestjs и у меня возникла проблема с использованием средств защиты для аутентификации запроса.

Суть (полный код)

import { PassportStrategy } from '@nestjs/passport';
import { Injectable, UnauthorizedException, HttpStatus, Logger } from '@nestjs/common';
import { Strategy } from 'passport-localapikey-update';
import { size } from 'lodash';

import { AuthService } from './auth.service';

@Injectable()
export class ApiKeyStrategy extends PassportStrategy(Strategy, 'localapikey') {
    constructor(private readonly authService: AuthService) {
        super();
    }

    async validate(token: string) {
        Logger.log('HERE!!!!!!!!!!!!!!', 'ApiKeyStrategy');  // Not printed
        const data = await this.authService.authenticateClient(token);
        if (!size(data)) {
            throw new UnauthorizedException('Unauthorized');
        }
        return data;
    }
}

@UseGuards(AuthGuard('localapikey')) нене выполняется и выдает ошибку 401.

Ни один из журналов не распечатывается.

1 Ответ

0 голосов
/ 07 февраля 2019

Вы должны передать функцию проверки в конструкторе super стратегии паспорта.

constructor(private readonly authService: AuthService) {
  super((token, done) => done(null, this.validate(token)));
}

Вы также можете передать объект параметров в качестве первого параметра:

constructor(private readonly authService: AuthService) {
  super({apiKeyField: 'myapikeyfield'}, (token, done) => done(null, this.validate(token)));
}

Кстати: я бы рекомендовал использовать экземпляр Logger вместо статического доступа к нему, см. этот поток .

...