首页 > 解决方案 > 如何将 jwt 令牌从一条路线传递到另一条路线

问题描述

我的节点 js 应用程序中有两条路线:users&records

users路线中,我在/login路径上获取令牌:

users.post('/login', function(req, res) {
    const email = req.body.email;
    const password = req.body.password;
    var token = '';
    connection.query(`SELECT * FROM ${process.env.USER_TBL} WHERE EMAIL = ?`, [email], function(err, results, fields) {
        if (err) {
            res.status(200).json({'message' : err, 'token' : token})
        }
        if (results.length > 0) {
            bcrypt.compare(password, results[0].PASSWORD).then(function(match) {
                if (match == true) {
                    token = jwt.sign(JSON.parse(JSON.stringify(results[0])), process.env.SECRET_KEY, {
                        expiresIn: 5000
                    })
                    res.status(200).json({'message' : 'User verified', 'token' : token})
                } else {
                    res.status(200).json({'message' : 'Email or Password does not match', 'token' : token})
                }
            })
        } else {
            res.status(200).json({'message' : 'Email does not exists', 'token' : token})
        }
    })
    connection.end(err => {
        if(err) console.log(err);
    })
})

在我的第二条路线records中,我正在向 path 发出请求/addNewRecord

records.post('/addNewRecord', function(req, res) {
      //need the token to authenticate the request
});

在这里,我需要从/login路由生成的令牌发送到 hrader 并验证我的请求。

但我了解如何将token值从users路由传递到records路由。

标签: node.jsjwt

解决方案


登录时,您将令牌传输给用户,捕获该令牌并将其放入客户端的本地存储中。然后它可用于对服务器的下一次调用。

localstorage.setItem('token', token)

在发出下一个服务器请求时,您将使用标头中存储的令牌。

$.ajax({
  url: "URL",
  method: "POST",
  headers: {
    'authorization': localstorage.getItem('token'), //YOUR TOKEN GOES HERE
    'anotherHeader': 'headerValue2'
  }
});

然后您可以从下一个请求中捕获令牌以验证它是否有效

records.post('/addNewRecord', function(req, res) {
      let token = req.headers['authorization']
});


推荐阅读