Django Rest Framework - response.set_cookie() не устанавливает cookie в браузере, но работает в postman и в просматриваемом api

Я пытаюсь установить jwt-токен в httponly cookie. Я перепробовал много решений, но они не работают. Я работаю с localhost "127.0.0.1", но когда я пытаюсь войти в систему, куки, отправленные сервером, не отображаются в моем frontend, работающем по адресу "127.0.0.1:5501", но если я попробую с Browsable api, работающим по адресу "127.0.0.1:8000", он работает нормально, и я могу легко проверить свои куки.

Я тоже заметил странную вещь. Если я вхожу через фронтенд "127.0.0.1:5501", куки не устанавливаются, но если я попробую с browsable api, работающим на "127.0.0.1:8000", а затем переключусь на вкладку "127.0.0.1:5501", я вижу, что куки тоже установлены. Это очень странно и я не знаю причину этого.

Пожалуйста, помогите мне решить эту проблему.

Views.py

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']
                                        )
                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)

Получение Api запроса


async function login(email,password)
{
    
    let response = await fetch('http://127.0.0.1:8000/api/account/login/',{
        method: 'POST',
        headers: {
            "Accept": "application/json",
            "Content-Type": "application/json",
            
        },
        withCredentials: true,
        body: JSON.stringify({
            'username': email,
            'password': password
        })

    

    })
    return response;
}

Файл Settings.py

ALLOWED_HOSTS = ['127.0.0.1']
CORS_ALLOW_HEADERS = default_headers + (
    'Access-Control-Allow-Origin',
)

CORS_ALLOW_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = [
    "http://127.0.0.1:5501",
]


# ////////////////custom settings/////////////source : stackoverflow/////////////////////
    'AUTH_COOKIE': 'access_token',  # Cookie name. Enables cookies if value is set.
    'AUTH_COOKIE_DOMAIN': None,     # A string like "example.com", or None for standard domain cookie.
    'AUTH_COOKIE_SECURE': False,    # 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': 'Lax',  # Whether to set the flag restricting cookie leaks on cross-site requests.
                                # This can be 'Lax', 'Strict', or None to disable the flag.
    


Демонстрация почтальона enter image description here

Демонстрация просматриваемого api

enter image description here

Демонстрация фронтенда enter image description here

Если вы также боретесь с этой проблемой. Просто убедитесь, что у вас есть вышеуказанные настройки и следуйте этому простому обновлению.

let response = await fetch('http://127.0.0.1:8000/api/account/login/',{
        method: 'POST',
        headers: {
            "Accept": "application/json",
            "Content-Type": "application/json",
            
        },
        credentials: 'include',
        body: JSON.stringify({
            'username': email,
            'password': password
        })

    

    })

Это должно быть учетные данные только.

Вернуться на верх