如何将jwt令牌从一条路由传递到另一条路由

时间:2018-08-02 14:13:06

标签: node.js jwt

我的节点js应用程序中有两条路由:usersrecords

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中,我正在请求路径/addNewRecord

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

在这里,我需要使用/login路由生成的令牌来发送交易者并验证我的请求。

但是我了解如何将token路由中的users值传递给records路由。

2 个答案:

答案 0 :(得分:2)

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

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']
});

答案 1 :(得分:1)

您不能以这种方式在服务器端代码之间传递令牌。它必须从客户端发送。每当从客户端调用/login并收到响应时,您就可以将来自该响应的令牌存储在客户端上。调用/addNewRecord时,只需在客户端的请求标头中添加令牌,就可以通过在服务器端检查req.get(headerName)req.headers来访问令牌。