#javascript #node.js #authentication #cookies #jwt
#javascript #node.js #аутентификация #файлы cookie #jwt
Вопрос:
Я создаю блог, используя node.js (без экспресса), где пользователи могут комментировать сообщения. Я требую, чтобы пользователи входили в систему, прежде чем они смогут комментировать, поэтому я использую веб-токены 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 от клиента к серверу?
Комментарии:
1. Можете ли вы установить какой-либо другой файл cookie?
2. Привет, Дуг, да, я могу установить другие файлы cookie. Все они отлично отображаются в объекте request.headers.cookies для post-запросов. Единственный, который не отображается, — это JWT.
3. Можете ли вы поместить чистый тестовый текст в файл cookie jwt, а строку jwt — в другой файл cookie?