首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用nestJS注销JWT

使用nestJS注销JWT
EN

Stack Overflow用户
提问于 2021-01-28 08:00:27
回答 4查看 2.3K关注 0票数 0

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

代码语言:javascript
运行
复制
 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),
    };
  }

此部分正在运行。我的问题是:如何注销?我读到过创建黑名单并将令牌添加到黑名单中,但是如何获取用户的访问令牌?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-01-28 08:25:54

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

票数 4
EN

Stack Overflow用户

发布于 2021-01-28 08:16:21

通常,当发送注销请求时,Authorization标头应该存在,这样您就可以从那里获取令牌。然后,您可以将令牌保存到数据库的限制列表中。

票数 1
EN

Stack Overflow用户

发布于 2021-01-28 11:47:02

当用户点击“注销”btn时,您应该发送一个带有持有者令牌的授权标头的请求。在后台,您需要提取头部并将token推送到黑名单token (作为您的解决方案)。基本上,你只需要在客户端删除令牌,这很容易做到,但在最坏的情况下,令牌被黑客窃取,你的令牌仍然有效。使用黑名单令牌更安全,但它可能会导致性能问题和可伸缩性。最佳解决方案是什么?这取决于你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65929178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档