有没有办法将JSON Web令牌附加到HTML表单POST请求?

时间:2019-04-21 14:55:47

标签: javascript node.js authentication cookies jwt

我正在使用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令牌字符串从客户端传递到服务器的最佳方法是什么?

0 个答案:

没有答案