Как отправить файл cookie httponly с помощью axios?

#django #cookies #axios #create-react-app #httponly

Вопрос:

Я использую серверную часть django и интерфейс CRAO. Я сохранил токен обновления jwt как файл cookie httponly:

 document.cookie = `refresh=${refresh_token}; SameSite=Strict; Path=/api/token/refresh; HttpOnly`;
 

Затем, чтобы обновить маркер доступа, я отправляю запрос axios:

 const response = await axios.post('/api/token/refresh/', { withCredentials: true });
 

Но в этом случае первоначально сохраненные файлы cookie не отправляются axios. Однако при удалении атрибута httponly файлы cookie действительно отправляются, и все работает нормально.

Комментарии:

1. смысл httponly файлов cookie в том, что они никоим образом не могут быть затронуты клиентом (т. Е. javascript).

2. @yedpodtrzitko, я понимаю. Спасибо, что разъяснили это. Я знал об этом, но не понимал, что они также не будут отправлены автоматически по запросу. Есть ли у вас какие-либо другие рекомендации для достижения этой цели?

3. чего добиться?

Ответ №1:

Вы неправильно настроили файл cookie в своем приложении django. следуйте этому способу, чтобы сохранить его как файл cookie httponly:

 response.set_cookie(
        key=settings.SIMPLE_JWT["AUTH_COOKIE_REFRESH"],
        value=token["refresh"],
        expires=settings.SIMPLE_JWT["ACCESS_TOKEN_LIFETIME"],
        secure=settings.SIMPLE_JWT["AUTH_COOKIE_SECURE"],
        httponly=settings.SIMPLE_JWT["AUTH_COOKIE_HTTP_ONLY"],
        samesite=settings.SIMPLE_JWT["AUTH_COOKIE_SAMESITE"],
    )