Я создаю блог, используя node.js (без Express), где пользователи могут комментировать сообщения. Я требую, чтобы пользователи вошли в систему, прежде чем они смогут комментировать, поэтому я использую веб-токены JSON (созданные с помощью модуля узла jsonwebtoken) для аутентификации их статуса входа. После успешного входа в систему в файл заголовка ответа страницы добавляется файл cookie, содержащий JWT, например:
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
Проблема возникает, когда вошедший в систему пользователь пытается оставить комментарий. Я обрабатываю это с помощью запроса POST через форму HTML, но по какой-то причине 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 отсутствует. Я попытался заменить запрос формы HTML на XmlHttpRequest из DOM, но я все еще получаю тот же результат. JWT выглядит нормально в заголовках запросов GET, эта проблема возникает только с запросами POST.
Как лучше всего передать закодированную строку веб-токена JSON с клиента на сервер?