我正在使用jwt保护表单连接的安全,因此我必须使用成功发布请求后给出的令牌来执行get请求。
我尝试使用window.location.href更改位置,但是这样做(这就像一个get请求)并且没有我的令牌,所以我会得到403,因为我没有服务器签名的令牌。
服务器端:
app.post('/',urlencodedParser,function(req,res){
//data base verification
const myToken=jwt.sign({iss:"locahost:8080",user:req.body.email,role:"moderator",admin:false},app.get('secret'));
res.status(200).json(myToken);
});
app.get('/home',function (req,res){
res.status(200).sendFile(__dirname+'/views/admin.html');
});
客户端:
var xhr = new XMLHttpRequest();
xhr.open("POST", '/', true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function() {
if(xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200) {
if(JSON.parse(xhr.response)=="access-denied"){
createAlert("alert alert-danger","Email ou mot de passe incorrect");
}else{
localStorage.setItem('token', JSON.parse(xhr.response));
homeRequest();
}
}
}
var payLoad = "email=" + email + "&" + "password=" + password;
xhr.send(payLoad);
}
function homeRequest(){
var xhr=new XMLHttpRequest();
xhr.open("GET",'/home',true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.setRequestHeader('Authorization', 'Bearer '+localStorage.getItem('token'));
xhr.onreadystatechange=function(){
if(xhr.readyState == XMLHttpRequest.DONE && xhr.status ==200){
console.log('xhr response ',xhr.response);
}
}
xhr.send(null);
}
我的实际结果是在xhr响应中有整个页面,但是我想在我的POST请求完成后对另一个路由进行GET请求,我想在标头中使用令牌获取/ home以便服务器接受并发送此页面,但是问题仍然存在于路由/中,并且我无法加载此路由。
很抱歉,如果不够清楚:/
答案 0 :(得分:0)
我认为保存令牌没有问题,除非服务器端的其他代码做错了。您随时可以使用localStorage
或sessionStorage
虽然您的问题不清楚。您可以通过loggin
结果进行调试,以下是一些建议:
首先,在收到对发布请求的答复后尝试console.log
,以查看您收到了什么
另外,尝试在服务器的get函数中console.log
,检查是否存在这样的文件