jquery - 使用 Jquery 发送标头以访问 Node.js 路由
问题描述
我有一个非常具有挑战性的问题。我刚开始使用JWT。我进行登录并将令牌作为JSON 响应发送给客户端。我将它保存到sessionStorage,然后我想使用令牌访问受保护的路由,这基本上是用户在登录时应该看到的。
问题是我还应该以某种方式从客户端发送标头中的令牌。现在我只做那条路线。window.location.pathname = '/LimeLINE/chatroom'
我觉得应该有一个额外的步骤来做到这一点,比如获取客户端?
所以第一步,登录客户端:
// Login POST
$('#frm-login').submit(function (e) {
event.preventDefault()
$('button').text('Please wait ...').prop('disabled')
$.ajax({
url: "/login-user",
type: "POST",
data: $('#frm-login').serialize(),
dataType: "json"
}).always(function (response) {
$('button').text('Logging in').prop('disabled')
console.log("Login", response)
if (response.status == "error") {
$('button').removeClass('lime').addClass('red').text('Log in failed. Try again.');
return
}
//console.log(response)
const token = response.token;
sessionStorage.setItem(token, token);
window.location.pathname = '/LimeLINE/chatroom'
})
})
所以第2步,登录服务器:
/********************* LOGIN *********************/
app.post('/login-user', (req, res) => {
user.loginUser(req.body, (err, jResult) => {
if (err) {
return res.send(jResult)
}
let token = jwt.sign({
user: jResult,
}, "supersecret", (err, token) => {
if (err) {
return res.statusCode(500)
}
})
console.log(token)
return res.json({
token: token
})
//add other headers here...
})
})
和受保护的路线:
// ********************* MAIN PAGE *************************
app.get('/LimeLINE/chatroom', verifyToken, (req, res) => {
jwt.verify(req.token, "supersecret", (err, authData) => {
if (err) {
return res.status(403).json({
message: "No token found"
});
} else {
try {
var sMainHtml = fs.readFileSync(__dirname + '/html/main.html', 'utf8')
} catch (e) {
console.log(e)
return res.sendStatus(500)
}
return res.send(sMainHtml);
/*return res.json({
authData
});*/
}
})
})
解决方案
推荐阅读
- glibc - 编写自定义 nss 主机模块
- excel - 如何从最后一行取消隐藏 VBA 中的所有行?
- sql-server - 从 .ss 文件恢复 SQL Server 数据库
- ldap - LDAP 更改 uID 和 gID 的基数
- docker - HAProxy/Docker: 运行 Flask/React 应用程序的 Docker 容器时出现 502 Bad Gateway
- go - 使用 GORM 同时保存到事务
- java - 检索firebase实时数据库中节点下的所有数据
- c - 如何提高从 AVL 树中查找范围内项目数的功能的效率?
- hive - Hive - 无法比较同一个表中的两个日期列
- java - com.android.support 库必须使用完全相同的版本规范 & [] Google Play 服务有问题