如何使用外部身份验证服务对用户进行身份验证?

时间:2021-05-04 15:20:09

标签: javascript typescript nestjs

我有一个用于登录和用户注册的微服务。在 localhost:8080 上以 { "username": "test", "password":"test"} 发起请求后,我得到一个身份验证令牌,如:{ "token":"asdfsadfasdf..." },

并且我必须在另一个微服务中使用此令牌在我的端点上启动请求之前对用户进行身份验证,并且我有这样的代码:

import { Injectable } from "@nestjs/common";
import { AuthGuard } from "@nestjs/passport";

@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {}
    @Get()
    @UseGuards(JwtAuthGuard)
    private async getHello(): Promise<void> {
        console.log("Hello world");
    }
@Module({
  imports: [
        JwtModule.register({
      secret: 'secretKey',
    }),
    JwtStrategy,
    PassportModule.register({ defaultStrategy: 'jwt' })
],
  providers: [AppService],
  controllers: [AppController]
})
export class AppModule{}

启动我的 Get 请求后,我收到一个错误:

[Nest] 10472   - 04.05.2021, 17:14:00   [ExceptionsHandler] Unknown authentication strategy "jwt" +3677ms
Error: Unknown authentication strategy "jwt"

策略


@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
    constructor() {
        super({
          jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
          secretOrKey: 'secret',
        });
    }
}

谁能告诉我我做错了什么以及为什么我的身份验证策略不好?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

将您的 JwtStrategyimports 移动到 providers 数组。提供者从不进入 imports 数组。只有模块属于那里。