Django Rest Framework - Cookies исчезают после перенаправления/обновления
Я впервые работаю с jwt-токенами для входа в систему и хранением этого токена бэкендом в http only cookies и еще одной cookie. Проблема в том, что на странице входа в систему, когда я вхожу в систему... куки устанавливаются правильно, но когда страница перенаправляется на страницу профиля, куки теряются и вход становится выходом из системы. Я обновила страницу и обнаружила ту же проблему. Пожалуйста, помогите мне. Это происходит только на производстве, но не в разработке.
Мои домены -
В разработке
frontend - 127.0.0.1:5501
backend - 127.0.0.1:8000
В производстве
frontend - https://xyz.netlify.app
backend - https://xyz-web.herokuapp.com
Мои настройки корса
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_SAMESITE = 'None'
ACCESS_CONTROL_ALLOW_HEADERS = True
CORS_ALLOW_HEADERS = [
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
'Access-Control-Allow-Origin'
]
# CORS_ORIGIN_ALLOW_ALL=True
CORS_ALLOW_METHODS = [
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
]
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = [
"http://127.0.0.1:5501",
"https://xyz.netlify.app"
]
Мой вид входа устанавливает куки после входа
def get_tokens_for_user(user):
refresh = RefreshToken.for_user(user)
return {
'refresh': str(refresh),
'access': str(refresh.access_token),
}
class LoginView(APIView):
def post(self,request,format=None):
data = request.data
response = Response()
username = data.get('username', None)
password = data.get('password', None)
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
data = get_tokens_for_user(user)
response.set_cookie(
key = settings.SIMPLE_JWT['AUTH_COOKIE'],
value = data["access"],
expires = settings.SIMPLE_JWT['ACCESS_TOKEN_LIFETIME'],
secure = settings.SIMPLE_JWT['AUTH_COOKIE_SECURE'],
httponly = settings.SIMPLE_JWT['AUTH_COOKIE_HTTP_ONLY'],
samesite = settings.SIMPLE_JWT['AUTH_COOKIE_SAMESITE'],
)
response.set_cookie(
key = "tokenvalidate",
value = data["access"][0:len(data['access'])//2],
expires = settings.SIMPLE_JWT['ACCESS_TOKEN_LIFETIME'],
secure = settings.SIMPLE_JWT['AUTH_COOKIE_SECURE'],
httponly = False,
samesite = settings.SIMPLE_JWT['AUTH_COOKIE_SAMESITE'], #setting this cookie for logout functionality. frontend can remove this non httponly cookie using js in logout function.
#if this cookie is not sent in request then the authorization will be failed.
)
csrf.get_token(request)
response.data = {"Success" : "Login successfully","data":data}
return response
else:
return Response({"No active" : "This account is not active!!"},status=status.HTTP_404_NOT_FOUND)
else:
return Response({"Invalid" : "Invalid username or password!!"},status=status.HTTP_404_NOT_FOUND)
Значения, используемые в представлениях
# ////////////////custom settings/////////////source : stackoverflow/////////////////////
'AUTH_COOKIE': 'access_token',
'AUTH_COOKIE_DOMAIN': None, # A string like "example.com", or None for standard domain cookie.
'AUTH_COOKIE_SECURE': True, # Whether the auth cookies should be secure (https:// only).
'AUTH_COOKIE_HTTP_ONLY' : True, # Http only cookie flag.It's not fetch by javascript.
'AUTH_COOKIE_PATH': '/', # The path of the auth cookie.
'AUTH_COOKIE_SAMESITE': 'None', # Whether to set the flag restricting cookie leaks on cross-site requests.
# This can be 'Lax', 'Strict', or None to disable the flag.
** Даже все три куки, включая куки csrf, исчезают, когда я делаю редирект/обновляю страницу. Пожалуйста, помогите мне. Я пытаюсь решить эту проблему. Я отправляю учетные данные во всех вызовах выборки с фронтенда. Должен ли я устанавливать cookies во всех представлениях? Пожалуйста, помогите. **