使用 nestjs 身份验证时身份验证失败

Authentication failure while using nestjs authentication

我正在尝试使用 nestjs 文档实施身份验证。 https://docs.nestjs.com/techniques/authentication

我正在实施 JWT 身份验证,当我尝试访问正在验证的 API 时,我收到验证错误,甚至在验证之前。有没有人遇到过类似的问题。

@Get()
  @UseGuards(AuthGuard('jwt'))
  async findAll(): Promise<UserDto[]> {
    return this.userService.findAll();
  }

这条路线给我带来了未经授权的错误。我对 Typescript 和 nestjs 很陌生

我的代码在我的 GitHub 存储库中可用。请让我知道出了什么问题。 https://github.com/shamnadps/TypeScript_Project/blob/master/src/user/user.controller.ts#L23

您是如何访问该路线的?

您必须先创建令牌。

不知道这是否给了你提示

您的 - 轻微但严重 - 错误存在于您用于签署令牌的 secretOrKey 值中。 src/auth/jwt.strategy.tssrc/auth/auth.service.ts.
之间的值不同
src/auth/auth.service.ts:
而不是这个:

async createToken() {
    const user: UserDto = { name: 'shamnad', phoneNumber: '12435' };
    return jwt.sign(user, 'secretkey'); // <== /!\ focus on this one /!\
}

使用这个:

async createToken() {
        const user: UserDto = { name: 'shamnad', phoneNumber: '12435' };
        return jwt.sign(user, 'secretKey'); // <== /!\ focus on this one /!\
}

因为您使用 secretKey 来签署您的令牌,而不是 secretkey (注意驼峰式大小写):

constructor(private readonly authService: AuthService) {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      secretOrKey: 'secretKey', // <== /!\ focus on this line /!\
    });
}

为避免此类问题,我建议您使用 process.env.<your-variable> 而不是直接在字符串中手动设置配置。


src/auth/jwt.strategy.ts 中看起来像这样:

constructor(private readonly authService: AuthService) {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      secretOrKey: process.env.SECRET
    });
}

src/auth/auth.service.ts 中,像这样:

async createToken() {
    const user: UserDto = { name: 'shamnad', phoneNumber: '12435' };
    return jwt.sign(user, process.env.SECRET); // <== /!\ focus on this one /!\
}

最后,设置环境变量,根据你的OS执行如下命令:
- Mac OS: export SECRET=<your-secret-key>
- Windows: set SECRET=<your-secret-key>


希望对您有所帮助 ;)