我正在尝试使用node.js实现基于令牌的身份验证。令牌生成正在运行。当用户登录时,令牌被保存在浏览器cookie中。我的问题是我可以使用服务器上的node.js从cookie中读取令牌,因为它随每个请求传递,但据我所知,将标头中的令牌作为x-access-token传递是一种更好的做法而且我不知道通过简单的页面加载是否可以做到这一点。
例如,当我登录时,获取并保存令牌,但是之后我应该被重定向到受保护的位置(例如,通过window.open(“ / protected”,“ _self”)),并且我无法设置此请求的标题。
我用于登录的JavaScript代码:
var httpRequest = new XMLHttpRequest();
var params = 'username=' + username.value + '&password=' + password.value;
httpRequest.open('POST', '/login', true);
httpRequest.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
httpRequest.responseType = "json";
httpRequest.onreadystatechange = function() {
if(httpRequest.readyState == 4 && httpRequest.status == 200) {
if(httpRequest.response.success){
setCookie("loginToken", httpRequest.response.token, 1);
window.open("/protected/", "_self");
}
showToast();
}
}
httpRequest.send(params);
打开/ protected时,Node.js正在使用cookie解析器从cookie中读取令牌:
var token = req.cookies.loginToken;
整个工作正常,但标头中没有cookie,但没有令牌。我应该使用cookie方法吗?如果没有,是否可以通过方法传递给标头中的令牌?
答案 0 :(得分:0)
请勿使用cookie方法,而是在用户登录时将令牌存储在与user_id对应的数据库中的user_table中,并检查每个活动的标头中传递的令牌(如果令牌有效),然后允许用户执行任何活动,否则注销用户令牌无效,并在注销时删除令牌。