Cookie не сохраняется в браузере

Итак, у меня есть следующий fetch api

    const loginUser = async (e) => {
        e.preventDefault()
        const URL = "http://localhost:8000/auth/login/"
        let response = await fetch(URL, {
            // credentials: "include",
            method: "POST",
            headers: {
                "Content-Type": "application/json",
            },
            body: JSON.stringify({
                username: e.target.username.value,
                password: e.target.password.value,
            }),
        })
        if (response.status === 200) {
            console.log(response)
        } else {
            setLoginStatus("Invalid credentials")
            loginStatusRef.current.style.visibility = "visible"
        }
    }

Это ответ вышеупомянутой выборки

Access-Control-Allow-Origin http://localhost:3000
Allow POST, OPTIONS
Content-Length 37
Content-Type application/json
Cross-Origin-Opener-Policy same-origin
Date Thu, 25 Aug 2022 16:44:07 GMT
Referrer-Policy same-origin
Server WSGIServer/0.2 CPython/3.10.5
Set-Cookie
    csrftoken=Ou23mE46QwuuJi37bVgsZq19NbEAzaFh; expires=Thu, 24 Aug 2023 16:44:07 GMT; Max-Age=31449600; Path=/; SameSite=Lax
Set-Cookie
    sessionid=hyvv9uwwdi0m0blhb3ks6vzgtnyimxa6; expires=Thu, 08 Sep 2022 16:44:07 GMT; HttpOnly; Max-Age=1209600; Path=/; SameSite=Lax
Vary Accept, Cookie, Origin
X-Content-Type-Options nosniff
X-Frame-Options DENY

когда я пытаюсь включить credentials:'include', я получаю следующую ошибку:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8000/auth/login/. (Reason: CORS request did not succeed). Status code: (null)

я уже включил cors в django


CORS_ALLOWED_ORIGINS = ['http://localhost:3000', ]

INSTALLED_APPS = [
    . . . 
    "corsheaders"
]

Как вы видите, cookie sessionid возвращается, но не сохраняется в браузере. прошу помочь

  • В настоящее время у вас по умолчанию поведение, что CORS-предварительные запросы никогда не должны включать учетные данные.
  • Укажите Access-Control-Allow-Credentials:true в ответе, чтобы указать, что фактический запрос может быть сделан с учетными данными, что должно решить эту проблему.

Заголовок Access-Control-Allow-Credentials указывает, может ли быть раскрыт ответ на запрос, если флаг credentials установлен true. При использовании в качестве части ответа на предварительный запрос, он указывает, может ли фактический запрос быть сделан с использованием учетных данных. Таким образом, если запрос сделан для ресурса с учетными данными, если этот заголовок не возвращается вместе с ресурсом, ответ игнорируется браузером и не возвращается в веб-контент. Обратите внимание, что простые запросы GET не подвергаются префлаингу.

Вернуться на верх