【问题标题】:Saving JWT token to local storage将 JWT 令牌保存到本地存储
【发布时间】:2018-11-12 16:57:12
【问题描述】:

我想将 JWT 令牌保存到本地存储中以验证路由。我的代码在下面,但是当这条路线被点击时,浏览器只是处于加载状态,然后说这个页面不起作用。删除 localStorage.setItem() 使其工作。我想知道为什么会这样。谢谢。

} else {
        bcrypt.compare(password, user.password).then(Matched => {
          if (Matched) {
            //Create the payload for JWT to code
            const payload = { id: user.id, name: user.name, email: user.email };

            jwt.sign(
              payload,
              keys.JWT_KEY,
              { expiresIn: 3600 },
              (err, token) => {
                **localStorage.setItem("token", token);
                res.redirect("/");**
              }
            );
          } else {

【问题讨论】:

    标签: node.js express authentication jwt


    【解决方案1】:

    因为localStorage.setItem("token", token)在nodejs中不存在,所以应用程序会在这一行崩溃并且res.redirect("/");永远不会被执行,所以响应永远不会被发回并且你的浏览器在等待响应时会挂起。

    要修复它,使用res.json({ token: token }); 将令牌发送回客户端并在浏览器中运行localStorage.setItem("token", token);

    【讨论】:

    • 感谢回复,发回res.json({token: token})后,如何指定localStorage.setItem在浏览器中完成。 @约翰李
    • 确保您使用的是 AJAX,并在该 ajax 请求的响应部分中,使用 localStorage.setItem
    • 示例$.post('/login', { username: 'joe', password: '123'}, function(res){ localStorage.setItem("token", res.token); });
    • 有没有办法在不使用 ajax 请求的情况下做到这一点?
    • 您可以使用 websocket 或任何其他客户端-服务器通信方式。 Ajax 是最容易获得的。底线是令牌生成必须在服务器端完成。
    猜你喜欢
    • 2018-11-14
    • 2017-09-22
    • 2018-11-15
    • 2018-11-05
    • 2020-10-25
    • 2022-01-15
    • 2019-02-01
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多