我刚刚开始使用JWT。我执行登录,并将令牌作为JSON响应发送到客户端。在成功登录sessionStorage后,我将其存储到,然后使用该令牌通过另一个ajax调用(GET)的头部访问保护路由,成功后将重定向到该页面。
我从保护/verify-user直接开始保护路由I am 重定向,并且没有路由E 229
,但是自从E 130
重定向<>E 231<>E 132头<代码>E 233都是E 134
没有发送E 235
我发现这个E 136
解决方案E 237仅用于验证令牌。不过,我不知道这是不是好办法。
你认为如何?
我的登录在客户端上
// 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
}
localStorage.setItem('token', response.token);
console.log(localStorage.token)
$.ajax({
type: "GET",
url: "/verify-user",
headers: {
'Authorization': 'Bearer ' + localStorage.token
}
}).always(function (response) {
console.log("Access", response)
if (response.status == "error") {
$('button').removeClass('lime').addClass('red').text('Log in failed. Try again.');
return
}
if (response.status == 301) {
$(location).attr('pathname', '/LIMELine/chatroom/');
//$('img#profile-img').attr('src', response.responseText.authData.user.avatar)
console.log(response)
}
});
})
})
我的登录在服务器上
/********************* 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")
console.log(token);
return res.json({
token: token
})
//add other headers here...
})
})
/********************* VERIFY USER *********************/
app.get('/verify-user', verifyToken, (req, res) => {
jwt.verify(req.token, "supersecret", (err, authData) => {
if (err) {
return res.status(403).json({
message: "No token found"
});
}
return res.status(301).json({
authData
});
})
})
保护路由,用户在登录时应该看到它。
// ********************* MAIN PAGE *********************************************
app.get('/LimeLINE/chatroom' (req, res) => {
try {
// CODE FOR CONTENT OF THE PAGE
return res.json({
authData
});
}
})
})
发布于 2018-05-17 07:41:29
如果您正在进行完整的页面重定向(不是通过ajax,而是通过浏览器自动进行重定向,就像单击未调好的锚标记时一样),浏览器将不会自动发送Authorization
HTTP头。
您可以使用cookie开始发送JWT令牌(这不太标准,并将客户机绑定为浏览器,但将自动发生在所有完整页面和AJAX调用上),也可以通过ajax调用处理重定向。另一个“混合”解决方案是同时启用Authorization
头和cookie作为有效的授权方法。
这一切都取决于您的服务器是否应该接受非浏览器客户端当前或在不久的将来。
https://stackoverflow.com/questions/50384251
复制相似问题