node.js - 如何将 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
路由。
解决方案
登录时,您将令牌传输给用户,捕获该令牌并将其放入客户端的本地存储中。然后它可用于对服务器的下一次调用。
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']
});
推荐阅读
- scala - 循环遍历列表,每次获取越来越多的元素
- firebase - Firebase Crashlytics 卡在添加 SDK
- c++ - 如何测试具有编译时已知长度的 std::initializer_list 的 ctor?
- java - 如何在java中创建一个hello world按钮
- twilio - 删除资产
- javascript - 如何在打字稿中为展平对象键编写类型/或使用使用类型?
- flutter - Flutter 意外删除了 pubspec.yaml 文件,出现“URI 目标不存在”错误
- flutter - 如何在 Flutter 测试中禁用网络连接?
- chef-infra - 有没有办法遍历 Chef 配方中的 node.run_state 数据?
- python - Python:如果字符为 =“/”,则仅从字符串末尾删除字符