我正在使用node.js(无Express)构建博客,用户可以在其中发表评论。我要求用户登录后才能发表评论,因此我正在使用JSON Web令牌(通过jsonwebtoken节点模块创建)来验证其登录状态。当他们成功登录后,包含JWT的cookie将添加到页面响应标头中,如下所示:
res.writeHead(302, {"Set-Cookie": `jwt=${MYTOKENISHERE}; max-age=9000; HttpOnly`,
Location: "/blog/blog.html"
});
res.end();
当我在浏览器中检查网页的cookie时,我可以看到编码的JWT-到目前为止,很好:
链接到屏幕截图:https://i.ibb.co/MBzw5jX/cookies.png
登录的用户尝试发表评论时出现问题。我正在通过HTML表单通过POST请求处理此问题,但是由于某些原因,JWT并未出现在到达我的服务器/路由器的请求对象中。这是我的路由器代码的一部分:
const cookie = require('cookie');
if (method === "POST") {
if (request.url.includes("/create/comment")) {
let cookies = cookie.parse(request.headers.cookie);
console.log("COOKIES :", cookies);
}
}
//Expected console.log() output:
COOKIES: {
jwt: [THE ENCODED JWT STRING],
_ga: 'GA1.1.1615891668.1553812077', // random google analytics cookie
gid: 'GA1.1.1919987325.1555742391' // random google analytics cookie
}
// Actual console.log() output:
COOKIES: {
_ga: 'GA1.1.1615891668.1553812077', // random google analytics cookie
gid: 'GA1.1.1919987325.1555742391' // random google analytics cookie
}
如您所见,JWT丢失了。我尝试用DOM中的XmlHttpRequest替换HTML表单请求,但仍然得到相同的结果。 JWT在GET请求标头中看起来不错,我在POST请求中只有这个问题。
将编码的JSON Web令牌字符串从客户端传递到服务器的最佳方法是什么?