为什么 jwtService 未定义?

Але*_*ьёв 2 jwt typescript nestjs

JwtAuthGuard 我在其中验证标头中的令牌:

import { JwtService } from '@nestjs/jwt';
import {
  CanActivate,
  ExecutionContext,
  UnauthorizedException
} from '@nestjs/common';
import { Observable } from 'rxjs';

export class JwtAuthGuard implements CanActivate {
  constructor(private jwtService: JwtService) {}

  canActivate(
    context: ExecutionContext
  ): boolean | Promise<boolean> | Observable<boolean> {
    const req = context.switchToHttp().getRequest();

    try {
      const authHeader = req.headers.authorization;
      const token = authHeader.split(' ')[1];

      const user = this.jwtService.verify(token);

      req.user = user;
      return true;
    } catch (error) {
      console.log(error);
      throw new UnauthorizedException();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我的控制器:

import { Controller, Get, UseGuards } from '@nestjs/common';
import { JwtAuthGuard } from 'src/auth/jwt-auth.guard';
    
 @Controller('api/messages')
 export class MessagesController {
  @UseGuards(JwtAuthGuard)
  @Get()
   getAllUserMessages() {
     return "it's work";
     }
  }
Run Code Online (Sandbox Code Playgroud)

我在其中注册 JWT 的 AuthModule:

import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { AuthController } from './auth.controller';
import { UsersModule } from 'src/users/users.module';
import { JwtModule } from '@nestjs/jwt';
import { ConfigService } from '@nestjs/config';

@Module({
  providers: [AuthService],
  controllers: [AuthController],
  imports: [
    UsersModule,
    JwtModule.registerAsync({
      useFactory: async (configService: ConfigService) => ({
        secret: configService.get('AUTH_KEY'),
        signOptions: {
          expiresIn: '12h'
        }
      }),
      inject: [ConfigService]
    })
  ],
  exports: [JwtModule, AuthService]
})
export class AuthModule {}
Run Code Online (Sandbox Code Playgroud)

当我使用令牌去路由时/api/messages,出现错误:

TypeError: Cannot read property 'verify' of undefined
at JwtAuthGuard.canActivate (/Users/alexander/Projects/nest/paska/dist/auth/jwt-auth.guard.js:18:42)
Run Code Online (Sandbox Code Playgroud)

Jay*_*iel 5

你的守卫缺少@Injectable()装饰者。添加它就可以了。