Куки Django sessionid исчезают при обновлении
Я использую Django DRF backend с SessionAuthentication и NextJS frontend. Они размещены на разных портах. Я пытаюсь использовать функцию django login для автоматического входа пользователя в систему при создании учетной записи. Когда я запускаю эту функцию, sessionid и csrf cookie сохраняются в cookies, но при обновлении они исчезают.
Перед обновлением:
куки в инструментах разработчика
После обновления:
Соответствующие настройки файла settings.py:
CORS_ALLOW_CREDENTIALS = True
CSRF_USE_SESSIONS = True
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SAMESITE = 'None'
CORS_ALLOWED_ORIGINS = [
"https://localhost:3000",
]
CSRF_TRUSTED_ORIGINS = {
"https://localhost:3000"
}
Используемый вид:
class UserView(APIView):
renderer_classes = [JSONRenderer]
permission_classes = [
permissions.AllowAny
]
decorators = [sensitive_variables('password'), ensure_csrf_cookie]
@method_decorator(decorators)
def post(self, request, format=None):
"""Create User"""
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
username = serializer.validated_data['username']
password = serializer.validated_data['password']
user = authenticate(username=username, password=password)
if user:
login(request, user)
return Response(data={'response': 'Successfully created account'}, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Request:
const response = await fetch(`https://127.0.0.1:8000/user/`, {
method: 'POST',
mode: 'cors',
credentials: 'include',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data)
});
И сервер django, и NextJS работают с SSL-сертификатом dev, поэтому оба имеют https.