我的节点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
中,我正在请求路径/addNewRecord
,
records.post('/addNewRecord', function(req, res) {
//need the token to authenticate the request
});
在这里,我需要使用/login
路由生成的令牌来发送交易者并验证我的请求。
但是我了解如何将token
路由中的users
值传递给records
路由。
答案 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
来访问令牌。