javascript - 如何在客户端实现 JSON Web token - Node.js

标签 javascript node.js express jwt

我正在开发一个 Node.js Express 应用程序,使用 JWT 进行身份验证以访问我的管理页面。我用 Postman 测试了我的路线,效果很好,问题出在客户端。我将简化我的代码和我的问题,使问题更加清晰。

我的问题是,在使用 localStorage 将 token 存储在本地后,如何才能重定向到我的管理页面?

我已经尝试用 ajax 解决这个问题,但页面还是一样。我也试过 window.location='/admin' 但在这个中我无法发送包含 token 的 header

首先是我的服务器端:

app.get('/admin', verifyToken, function(req, res, next) {
    res.render('views/admin');
});

function verifyToken(req, res, next) {
    var token = req.headers['access-token'];
    if (!token)
      return res.status(401).send({ auth: false, message: 'NO TOKEN PROVIDED' });        

      jwt.verify(token, config.secret_key, function(err, decoded) {
      if (err)
      return res.status(500).send({ auth: false, message: 'Failed to authenticate token.' });

      console.log("Token is valid");
      next();
    });
  }

客户端:

function login(event) {
            event.preventDefault();
            let formData = new FormData(event.target);

            fetch("/admin/login", {
                    method: 'POST',
                    body: formData 
            }).then(function (response) {          
                    return response.json();
                }).then(function (result) {
                    if (result.auth === true) {
                        localStorage.token = result.token;
                    //HERE IS THE PROBLEM
                       $.ajax({ 
                         type : "GET", 
                         url : "/admin", 
                         beforeSend: function(xhr){
                        xhr.setRequestHeader('access-token', localStorage.token);
                                    },
                success : function(result) { 
                         //HERE IS THE PROBLEM                
                       window.location='/admin';
                         }
                        }); 
                    } else {
                        console.log("Incorrect username or password.");
                    }
                });       
        }

那么如何像在客户端的 Postman 中那样在 header 中发送 token 并自动重定向,有什么方法吗?非常感谢。

最佳答案

如果您的管理页面呈现为整页,则只需在/admin ajax 请求成功处理程序中执行 document.write(result)

success : function(result) {                 
                   document.write(result)
                     }

关于javascript - 如何在客户端实现 JSON Web token - Node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48935946/

相关文章:

javascript - Reactjs 使用 setState 还是 setProps 效率更高?

javascript - 如何设计多个段落的单选按钮?

node.js - Node 可读流问题

node.js - AppFog node.js 客户端无法加载 socket.io

node.js - 下一个JS如何根据IP地址重定向用户?

javascript - 无法确定 req.body.name 的值 - 表示 Node js

javascript - 如何使用express.js和request.js从Amazon S3下载文件?

javascript - 计算内部二维数组的值 - javascript

node.js - npm install --save Loopback-connector-mongodb 失败

javascript - 数据验证和安全 : From user input to browser output – PHP/MySQL/JavaScript