JWT cookie из бэкенда Django не работает после развертывания
Я написал веб-приложение, бэкенд на Django с использованием django_rest_framework utils, а фронтенд на React.js. Аутентификация основана на JWT-токене, хранящемся в cookies и localStorage.
Когда обе стороны были на localhost, все работало нормально, но после того, как я развернул frontend и backend на удаленном сервере, Django не может установить cookie в домене frontend.
Вот мой код из LoginView в Django:
`class LoginView(APIView): def post(self, request): username = request.data['login'] пароль = request.data['password']
user = authenticate(username=username, password=password)
if user is not None:
payload = {
'id': user.id,
'username': user.username,
'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=3600),
'iat': datetime.datetime.utcnow()
}
token = jwt.encode(payload, 'secret', algorithm='HS256')
response = Response()
response.set_cookie(key='jwt', value=token, httponly=False)
response.data = {
'jwt': token,
'username': user.username,
'userId': user.id
}
return response
response = JsonResponse({"message": "An issue occured during the authentication process."})
response.status_code = 500
return response`
settings.py
CORS_ORIGIN_WHITELIST = [
...
'https://<MY FRONTEND>.azurewebsites.net'
...
]
CSRF_TRUSTED_ORIGINS = [
...
"https://<MY FRONTEND>.azurewebsites.net"
]
CORS_ALLOWED_ORIGINS = [
...
"https://<MY FRONTEND>.azurewebsites.net"
]
CORS_ALLOW_CREDENTIALS = True
CSRF_USE_SESSIONS = False
SESSION_COOKIE_SECURE = False
CSRF_COOKIE_SECURE = False
CSRF_COOKIE_SAMESITE = 'None'
SESSION_COOKIE_SAMESITE = 'None'
SESSION_COOKIE_DOMAIN = '.azurewebsites.net'
CORS_ALLOW_HEADERS = list(default_headers) + ['Set-Cookie']
После входа в систему в моем фронтенд-приложении я не могу увидеть cookie с маркером JWT.
NOTE: Я заметил, что нет никаких проблем, если я пытаюсь войти в систему с помощью Thunderclient.
Что может быть не так?
Я полагал, что это были cookies одного сайта, я перепробовал все варианты, чтобы установить это на моем новом, развернутом домене фронтенда, но это не работает.