Делаю проект с авторизацией с помощью кукисов. Токен доступа с именем пользователя отправляется 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.
Проблема решена добавлением 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 и в браузере.