Django Cookies не устанавливаются в браузере, но работают в postman - Django Rest Framework

Привет всем Я столкнулся с проблемой установки cookies в браузере. Я разместил свой backend на heroku с url http://xxxxxxxxx.herokuapp.com/ и мой front end находится на локальном хосте. http://127.0.0.1:5501. Если я пытаюсь войти с помощью django, запущенного на моем локальном хосте 127.0.0.1:8000, то он работает и устанавливает cookies в браузере, но если я пытаюсь войти с помощью heroku, то он не устанавливает cookies в браузере, но если я пытаюсь войти с помощью postman, то он работает нормально. Я не могу разобраться в этой проблеме. Я уже добавил в бэкенд разрешенные источники. Пожалуйста, помогите мне.

установка коры

ALLOWED_HOSTS = ['127.0.0.1','http://dfit-web.herokuapp.com']


CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN' #will be used in enforce_csrf or validating csrf token

ACCESS_CONTROL_ALLOW_HEADERS = True
CORS_ALLOW_HEADERS = ('content-disposition', 'accept-encoding',
                      'content-type', 'accept', 'origin','x-csrftoken')



# CORS_ORIGIN_ALLOW_ALL=True
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = [
    "http://127.0.0.1:5501",
    "http://localhost: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']
                                        )
                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 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)

authenticate.py


def enforce_csrf(request):
    """
    Enforce CSRF validation.
    """
    

    check = CSRFCheck()
    # populates request.META['CSRF_COOKIE'], which is used in process_view()
    check.process_request(request)

    reason = check.process_view(request, None, (), {})
   
    if reason:
       
        # CSRF failed, bail with explicit error message
        raise exceptions.PermissionDenied('CSRF Failed: %s' % reason)
    else:
        return True
def validate_tokenvalidate(token,authtoken):
    if token != str(authtoken)[0:len(str(authtoken))//2]:
        raise exceptions.PermissionDenied('Invalid validate token sent')



  
        

class CustomJwtAuthentication(JWTAuthentication):
    
    def authenticate(self, request):
        header = self.get_header(request) #will check for the token in http_authorization header
        if header is None: 
            raw_token = request.COOKIES.get(settings.SIMPLE_JWT['AUTH_COOKIE']) or None
            tokenvalidate = request.COOKIES.get('tokenvalidate') or None

        else:
            raw_token = self.get_raw_token(header)
        if raw_token is None or tokenvalidate is None:
         
            return None  #will return 401 status code

        validated_token = self.get_validated_token(raw_token) #validate a jwt token
       
        enforce_csrf(request)  #will validate csrf token sent via  x-csrftoken header
     
        return self.get_user(validated_token), validated_token
Вернуться на верх