代码之家  ›  专栏  ›  技术社区  ›  Shamnad P S

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

  •  0
  • Shamnad P S  · 技术社区  · 6 年前

    我正在尝试使用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

    2 回复  |  直到 6 年前
        1
  •  1
  •   A. Maitre    6 年前

    你的-轻微但严重的-错误存在于 secretOrKey 您用于签名令牌的值。你有不同的价值观 src/auth/jwt.strategy.ts src/auth/auth.service.ts .

    源代码/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
        });
    }
    

    而在 源代码/auth/auth.service.ts ,如下所示:

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

    最后,要设置环境变量,请基于操作系统执行以下命令:
    -Mac操作系统: export SECRET=<your-secret-key>
    -窗口: set SECRET=<your-secret-key>


    希望能有所帮助;)

        2
  •  0
  •   small white    6 年前

    你是怎么进入路线的?

    必须先创建令牌。

    不知道这是否给了你提示

    enter image description here

    推荐文章