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

Typescript 使用nestjs身份验证时身份验证失败,typescript,authentication,jwt,express-jwt,nestjs,Typescript,Authentication,Jwt,Express Jwt,Nestjs,我正在尝试使用nestjs文档实现身份验证。 我正在实现JWT身份验证,当尝试访问正在进行身份验证的API时,我会得到验证错误,甚至在验证之前。有没有人面临过类似的问题 @Get() @UseGuards(AuthGuard('jwt')) async findAll(): Promise<UserDto[]> { return this.userService.findAll(); } @Get() @UseGuard(AuthGuard('jwt')) 异

我正在尝试使用nestjs文档实现身份验证。

我正在实现JWT身份验证,当尝试访问正在进行身份验证的API时,我会得到验证错误,甚至在验证之前。有没有人面临过类似的问题

@Get()
  @UseGuards(AuthGuard('jwt'))
  async findAll(): Promise<UserDto[]> {
    return this.userService.findAll();
  }
@Get()
@UseGuard(AuthGuard('jwt'))
异步findAll():承诺{
返回这个.userService.findAll();
}
这条路线给了我未经授权的错误。我对Typescript和nestjs真的很陌生

我的代码可以在我的GitHub repo中找到。请告诉我出了什么问题。
您是如何进入路线的

您必须首先创建令牌

我不知道这是否给了你一个暗示


您是如何进入路线的

您必须首先创建令牌

我不知道这是否给了你一个暗示


您的-轻微但严重-错误存在于您用于签名令牌的
secretroKey
值中。
src/auth/jwt.strategy.ts
src/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 /!\
}
为了避免此类问题,我建议您使用
process.env.
而不是直接在字符串中手动设置配置


它在
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 /!\
}
异步createToken(){ const user:UserDto={name:'shamnad',phoneNumber:'12435'};
返回jwt.sign(user,process.env.SECRET);/您的-轻微但严重的-错误存在于您用于为令牌签名的
secretrokey
值中。您在
src/auth/jwt.strategy.ts
src/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 /!\
}
为了避免此类问题,我建议您使用
process.env.
而不是直接在字符串中手动设置配置


它在
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 /!\
}
异步createToken(){ const user:UserDto={name:'shamnad',phoneNumber:'12435'};
返回jwt.sign(用户、进程、环境机密);//是的,我创建了一个令牌,然后使用post man将其作为授权标头发送。仍然不起作用。是的,我创建了一个令牌,然后使用post man将其作为授权标头发送。仍然不起作用。是的,就是这样。感谢您花时间查看我的代码。我昨天已经找到了它。但是非常感谢您的时间和精力。是的,谢谢是他的!谢谢你花时间查看我的代码。我昨天已经找到了。但是非常感谢你的时间和努力。