Nestjs: функция проверки не работает с jwt - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь использовать jwt в следующих гнездах document

Все в порядке, но функция проверки не работает в jwt.strategy.ts

этоmy jwt.strategy.ts:

import { Injectable, UnauthorizedException } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';
import { AuthService } from './auth.service';
import { JwtPayload } from './interfaces/jwt-payload.interface';

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor(private readonly authService: AuthService) {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('JWT'),
      secretOrKey: 'secretKey',
    });
  }

  async validate(payload: JwtPayload) {
    console.log(payload)
    // const user = await this.authService.validateUser(payload);
    // if (!user) {
    //   throw new UnauthorizedException();
    // }
    // return user;
  }
}

auth.module.ts:


import { Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt';
import { PassportModule } from '@nestjs/passport';
import { AuthService } from './auth.service';
import { JwtStrategy } from './jwt.strategy';

@Module({
  imports: [
    PassportModule.register({ defaultStrategy: 'jwt' }),
    JwtModule.register({
      secretOrPrivateKey: 'secretKey',
      signOptions: {
        expiresIn: 3600,
      },
    }),
  ],
  providers: [AuthService, JwtStrategy],
})
export class AuthModule {}

app.module.ts:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserModule } from './user/user.module';
import { GraphQLModule } from '@nestjs/graphql';
import { AuthModule } from './auth/auth.module';

@Module({
  imports: [
    TypeOrmModule.forRoot(),
    GraphQLModule.forRoot({
      typePaths: ['./**/*.graphql'],
    }),
    AuthModule,
    UserModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Когда я запрашиваю впочтальон, у меня нет логов, похоже, эта функция проверки не введена .:

enter image description here

это полный код

извините, у меня плохой английский, я впервые использую stackoverflow, спасибо за вашу помощь

1 Ответ

0 голосов
/ 19 января 2019

Метод validate вашего JwtStrategy будет вызываться только тогда, когда токен был проверен с точки зрения шифрования (для его подписи использовался правильный ключ, в вашем случае secretKey), и срок его действия не истек. Только после того, как эти две вещи были проверены, validate вызывается с полезной нагрузкой. С его помощью вы можете, например, проверьте, существует ли пользователь. Итак, три шага:

  1. Токен был подписан вашим секретным ключом
  2. Токен не истек
  3. Проверка пользовательской полезной нагрузки

Вы можете использовать отладчик jwt , чтобы вручную проверить шаги 1 и 2 для вашего токена.

...