Passport JwtStrategy从未在nestjs中执行过

问题描述 投票:0回答:1

我正在使用nestjs并且使用警卫来验证请求时遇到问题。我的JwtStrategy从未执行过。

这是我的JwtStrategy:

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
  constructor(
    @Inject('IQueryBusAdapter')
    private readonly queryBus: IQueryBusAdapter,
  ) {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      secretOrKey: process.env.JWT_SECRET_KEY,
    });
  }

  validate = async (payload: IJwtPayload) => {
    Logger.log('INNNNN');

    const query = new GetUserByIdQuery();
    query.id = payload.id;

    const user = await this.queryBus.execute(query);
    if (!(user instanceof User)) {
      throw new UnauthorizedException();
    }

    return user;
  };
}

我也尝试直接在构造函数中直接调用validate(),但没有任何改变......

我的AuthModule:

@Module({
  imports: [
    BusModule,
    JwtModule.register({
      secretOrPrivateKey: process.env.JWT_SECRET_KEY,
      signOptions: {
        expiresIn: process.env.JWT_EXPIRES,
      },
    }),
    PassportModule.register({ defaultStrategy: 'jwt' }),
    TypeOrmModule.forFeature([User]),
  ],
  controllers: [RegisterAction, LoginAction],
  providers: [
    JwtStrategy,
  ],
})
export class AuthModule {}

我的控制器

@Get('/:id')
  @ApiOperation({ title: 'Get user ressource' })
  @UseGuards(AuthGuard('jwt'))
  async index(@Param() query: GetUserByIdQuery): Promise<object> {
    const user = await this.queryBus.execute(query);

    if (!(user instanceof User)) {
      throw new NotFoundException();
    }

    return {
      id: user.id,
      fullName: user.getFullName(),
      email: user.email
    };
  }

我总是收到401状态代码。

谢谢你的帮助。

nestjs
1个回答
0
投票

只有在传递有效的jwt令牌时才会调用validate。当令牌使用不同的秘密签名或过期时,将永远不会调用validate。确保您拥有有效的令牌。您可以使用jwt debugger检查您的令牌。

© www.soinside.com 2019 - 2024. All rights reserved.