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 не подвергаются префлаингу.