使用 NestJS 注销 JWT

Jua*_*los 7 nestjs passport-jwt

我正在使用 JWT passaport 登录模块:

 async validateUser(userEmail: string, userPassword: string) {
    const user = await this.userService.findByEmail(userEmail);
    if (user && user.password === userPassword) {
      const { id, name, email } = user;
      return { id: id, name, email };
    }else {
      throw new UnauthorizedException({
        error: 'Incorrect username or password'
      });
    }
  }

  async login(user: any) {
    const payload = { email: user.email, sub: user.id };
    return {
      access_token: this.jwtService.sign(payload),
    };
  }

Run Code Online (Sandbox Code Playgroud)

这部分正在运行。我的问题是:如何注销?我读到有关创建黑名单并向其添加令牌的内容,但如何获取用户的访问令牌?

Pat*_*nus 17

关于基于令牌的身份验证,您应该了解的是它是无状态的。这意味着即使服务器也不会跟踪哪些用户经过了身份验证,就像基于会话的身份验证一样。因此,您不需要在服务器端执行任何操作来“注销”用户。您只需删除客户端上的 t\JWT 令牌即可。如果您向服务器应用程序发出请求,但没有有效的 JWT 令牌,则会被视为用户未登录。

  • 如果您在客户端删除令牌,该令牌仍然有效,并且可以被以前复制过它的恶意用户使用! (5认同)