Есть ли способ прикрепить веб-токены JSON к POST-запросу HTML-формы?

#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?