Невозможно получить доступ к файлу cookie в JavaScript, document.cookie пуст

Делаю проект с авторизацией с помощью кукисов. Токен доступа с именем пользователя отправляется js-клиенту сервером, и на сетевом мониторе в браузере я вижу файлы cookie, отправляемые с запросами от fetch. После перезагрузки страницы я хочу прочитать сохраненные файлы cookie и, если они присутствуют, сохранить их, чтобы пользователь мог войти в систему.

Проблема в том, что хранилище->Cookies в Firefox пусто, а document.cookie возвращает пустую строку.

Бэкенд — Python FastAPI, куки настраиваются следующим образом:

login_manager.set_cookie(response, token) # httponly=True
response.set_cookie("blueberry-user", data.login, httponly=False, expires=timedelta(days=1))

Код в js-интерфейсе, который отправляет запрос на авторизацию и получает файлы cookie:

let response = await fetch(backendUrl + handleUrl, {
      method: "post",
      mode: "cors",
      credentials: "include",
      body: JSON.stringify({ login: login, password: password }),
      headers: {
        "Content-Type": "application/json",
      },
    });

Файлы cookie устанавливаются и отправляются со следующим запросом: imgimg

Сначала я думал, что проблема в httponly, но когда я отключил его для установки файлов cookie, это не помогло.

🤔 А знаете ли вы, что...
JavaScript можно использовать для создания видеоигр, как 2D, так и 3D, с использованием библиотеки Three.js.


77
1

Ответ:

Решено

Проблема решена добавлением domain = "blueberry.adefe.xyz" в куки в ответ. Внутренний URL-адрес: api.blueberry.adefe.xyz, внешний URL-адрес: blueberry.adefe.xyz, возможно, проблема заключалась в файлах cookie с перекрестным происхождением.

Полный код для добавления файла cookie в ответ FastAPI:

@router.post("/user/login", tags=["Authentification"])
def post_login(data: AuthRequestModel, response: Response):
 ...
 response.set_cookie(
   "blueberry-user",
   data.login,
   httponly=False,
   expires=timedelta(days=1),
   domain = "blueberry.adefe.xyz",
  )
  response.status_code = status.HTTP_200_OK
  return response

До сих пор не понимаю, почему файлы cookie автоматически сохранялись и отправлялись вместе с запросами, но были недоступны в js и в браузере.