代码之家  ›  专栏  ›  技术社区  ›  Павел Хорольський

错误[ExceptionsHandler]未知身份验证策略“jwt”错误:未知身份验证战略“jwt

  •  0
  • Павел Хорольський  · 技术社区  · 1 年前

    当我请求使用Jwt策略保护的端点时,我得到了这个错误

    错误[ExceptionsHandler]未知的身份验证策略“jwt” 错误:未知的身份验证策略“jwt”

    所以这是我的
    jwt-auth.guard.ts

    import { Injectable } from '@nestjs/common';
    import { AuthGuard } from '@nestjs/passport';
    
    @Injectable()
    export class JwtAuthGuard extends AuthGuard('jwt') {}
    

    jwt.strategy.ts

    import { Injectable } from '@nestjs/common';
    import { PassportStrategy } from '@nestjs/passport';
    import { Strategy } from 'passport-local';
    import { ExtractJwt } from 'passport-jwt';
    import { ConfigService } from '@nestjs/config';
    import { IUser } from '../../types/types';
    
    @Injectable()
    export class JwtStrategy extends PassportStrategy(Strategy) {
      constructor(private readonly configService: ConfigService) {
        super({
          jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
          ignoreExpiration: false,
          secretKey: configService.get('JWT_SECRET'),
        });
      }
    
      async validate(user: IUser) {
        return { id: user.id, email: user.email };
      }
    }
    

    auth.module.ts

    import { Module } from '@nestjs/common';
    import { AuthService } from './auth.service';
    import { AuthController } from './auth.controller';
    import { UserModule } from '../user/user.module';
    import { PassportModule } from '@nestjs/passport';
    import { LocalStrategy } from './strategies/local.strategy';
    import { JwtModule } from '@nestjs/jwt';
    import { ConfigModule, ConfigService } from '@nestjs/config';
    import { JwtStrategy } from './strategies/jwt.strategy';
    
    @Module({
      imports: [
        UserModule,
        PassportModule,
        JwtModule.registerAsync({
          imports: [ConfigModule],
          useFactory: (configService: ConfigService) => ({
            secret: configService.get('JWT_SECRET'),
            signOptions: { expiresIn: '30d' },
          }),
          inject: [ConfigService],
        }),
      ],
      controllers: [AuthController],
      providers: [AuthService, LocalStrategy, JwtStrategy],
    })
    export class AuthModule {}
    

    auth.controller.ts

    import { Controller, Get, Post, Request, UseGuards } from '@nestjs/common';
    import { AuthService } from './auth.service';
    import { LocalAuthGuard } from './guards/./local-auth.guard';
    import { JwtAuthGuard } from './guards/jwt-auth.guard';
    
    @Controller('auth')
    export class AuthController {
      constructor(private readonly authService: AuthService) {}
      @UseGuards(LocalAuthGuard)
      @Post('login')
      async login(@Request() req) {
        console.log(req.user);
        return this.authService.login(req.user);
      }
    
      @UseGuards(JwtAuthGuard)
      @Get('profile')
      getProfile(@Request() req) {
        console.log('some profile');
      }
    }
    

    所以当我请求用有效的令牌来配置端点时,我会得到这个

    enter image description here

    我希望输出“控制台中的一些配置文件”

    1 回复  |  直到 1 年前
        1
  •  1
  •   Jay McDoniel    1 年前

    您正在使用 Strategy 从…起 passport-local 而不是来自 passport-jwt 。该战略本质上有一个名字 local ,这意味着没有名称为的策略 jwt 寻找护照。更改 策略 从导入 本地护照 护照jwt 应该没事