Set-Cookie не устанавливает cookies, проблема с одноименным сайтом Django & React
Я пытаюсь сохранить свой токен обновления, который я получаю из бэкенда django. Функции log()
, похоже, работают нормально, то есть, когда я нажимаю F12
и открываю вкладку Network
, я получаю ответ login/
, в котором есть поле Set-Cookie
, например, оно выглядит так:
Set-Cookie: refresh_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXVlLjoicmVmcmVzaXIsImV4cCI6MTYzMjU2MTY4OSwianRpIjoiZTg2MjhkMjhmOWJmNPMxYzg4ZjAyNjE3ZDNmMzFmNGUiLCJ1c2VyX2lkIjoiNDU1OTZkNTktNDI1Yy00ZmMxLThlYmUtNWU2YjQzMFRkZjQkIn0.ALfovbSQGIw6Hq6607LXXyhXXcvoUvUUlElCxnvRJfg; expires=Sat, 25 Sep 2021 09:21:29 GMT; HttpOnly; Max-Age=300; Path=/
но есть проблема и с полем SameSite:
This Set-Cookie header didn't specify a "SameSite" attribute and was defaulted to "SameSite=Lax" and was blocked because it came from a cross-site response which was not the response to a top-level navigation. The Set-Cookie had to have been set with "SameSite=None" to enable cross-site usage
Я не понимаю этого, потому что я удалил samesite=None
в моем представлении django:
response = Response(details, status=status.HTTP_200_OK)
response.set_cookie('refresh_token', str(refresh), httponly=True, secure=False, samesite=None, max_age=300, path="/", expires=int(SIMPLE_JWT['REFRESH_TOKEN_LIFETIME'].total_seconds()))
и проблема в том, что cookies
не сохраняются в F12 > Application > Cookies > http://localhost:3000
Моя функция входа выглядит следующим образом:
export const login = async (data) => {
const response = await log(data);
if (response.data.access_token) {
http.defaults.headers.Authorization = `JWT ${response.data.access_token}`;
} else {
delete http.defaults.headers.Authorization;
}
};
log() выглядит следующим образом:
export const log = async (credentials) => {
return await http.post(endpoints.LOGIN, {
email: credentials.email,
password: credentials.password,
});
};
и http:
const baseURL = "http://127.0.0.1:8000/api/";
const http = axios.create({
baseURL: baseURL,
timeout: 5000,
headers: {
"Content-Type": "application/json",
accept: "application/json",
},
withCredentials: true,
});
Внутри файла settings.py у меня есть:
CORS_ALLOW_CREDENTIALS = True