Chrome игнорирует мои попытки снять cookies (Django)
Я пытаюсь удалить куки на https-сайте. Куки были установлены сервером после успешного входа в систему, но chrome не снимает куки при выходе из системы, хотя заголовок Set-Cookie присутствует в заголовках ответа с правильными директивами.
@api_view(['POST'])
def login(request):
data = request.data
email = data.get('email')
password = data.get('password')
if not email or not password:
return JsonResponse({'error': 'Email and password are required'}, status=400)
user = authenticate_user(email, password)
if user is not None:
token = RefreshToken.for_user(user)
# Create response object
response = JsonResponse({'message': 'Login successful'})
# Set the token in a secure, HTTP-only cookie
response.set_cookie(
key='access_token',
value=str(token.access_token),
httponly=True,
secure=True, # Ensure you use HTTPS
samesite='Lax',
path='/',
domain='my-domain.com'
)
return response
else:
# Authentication failed
return JsonResponse({'error': 'Invalid credentials'}, status=401)
Вот мой метод выхода из системы:
@api_view(['POST'])
def logout(request):
# Create response object
response = JsonResponse({'message': 'Logout successful'})
response.set_cookie(
'access_token',
value='',
max_age=0,
path='/',
secure=True,
httponly=True,
samesite='Lax',
domain='my-domain.com'
)
return response
Дополнительно в файле settings.py у меня есть следующее:
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_PATH = '/'
CSRF_COOKIE_PATH = '/'
SESSION_COOKIE_DOMAIN = 'my-domain.com'
CSRF_COOKIE_DOMAIN = 'my-domain.com'
Я тестировал в Firefox, а также в режиме инкогнито. Что может быть причиной того, что файлы cookie не удаляются при моем способе выхода из системы?
Мне удалось заставить его работать. Я вызывал свою функцию входа в redux в обработчике React, который не использовал async await
, что могло вызвать проблемы с применением заголовка Set-Cookie. Кроме того, я хочу поблагодарить @AbdulAzizBarkat за указание на конфиг samesite='None'
, необходимый для межсайтовых запросов.