403 (Forbidden) при попытке получить доступ к DRF API из React js

Недавно я начал использовать django, и я также пытался использовать React js, и я хотел сделать что-то простое, как nav var в React. Для этого мне нужно получить информацию о пользователе, которая у меня есть на DRF API следующим образом в файле views:

ALLOWED_HOSTS = settings.ALLOWED_HOSTS
@api_view(['GET'])
@authentication_classes((SessionAuthentication, TokenAuthentication))
@permission_classes((IsAuthenticated,))
def user_details_view(request, *args, **kwargs): 
    current_user = request.user
    id = current_user.id
    status = 200
    data = dict()
    try:
        obj = CustomUser.objects.get(id=id)
        data = UserSerializer(obj)
        # data = obj.serialize()
    except:
        data['message'] = "Not Found"
        status = 404
    return Response(data.data, status=status)

Урлы настроены, и если я обращаюсь к нему на сервере django, он работает нормально, но когда я пробую на react:

function loadUserInfo(callback){
  const xhr = new XMLHttpRequest();
  const method = 'GET';
  const url = "http://127.0.0.1:8000/userdetails/";
  const responseType = "json";
  xhr.responseType = responseType; // Let the xhr request know that its getting a json 
  xhr.open(method, url); //This opens the request with the method and url entered
  xhr.onload = function(){
    console.log("This is the response: ",xhr.response)
    callback(xhr.response, xhr.status)
  }
  xhr.onerror = function(){
    callback({"message":"The request was an error"}, 400)
  }
  xhr.send();//Trigger that request
}

Я вызываю функцию в App(), но получаю:

GET http://127.0.0.1:8000/userdetails/ 403 (Forbidden)
This is the response:  {detail: 'Authentication credentials were not provided.'}

Как я могу заставить React быть доступным к данным, так как мне нужен var, чтобы позже стать компонентом, который будет вызываться в шаблонах django.

Вам необходимо получить токен auth в вашем приложении react. Токен генерируется, когда вы входите в Django из приложения react, и затем вам нужно передать этот токен вместе с методом get.

axios
  .get('http://www.exapmle.com', {
    headers: {
      Authorization: `Token ${props.token}`,
    },
  })

или в вашем приложении Django установите класс разрешения как любой для этой модели, или удалите IsAuthenticated из класса разрешения.

   permission_classes = [IsAuthenticated]

Вам необходимо получить токен auth в вашем приложении react. Токен генерируется, когда вы входите в Django из приложения react, и затем вам нужно передать этот токен вместе с методом get.

axios
  .get('http://www.exapmle.com', {
    headers: {
      Authorization: `Token ${props.token}`,
    },
  })

или в вашем приложении Django установите класс разрешения как любой для этой модели, или удалите IsAuthenticated из класса разрешения.

   permission_classes = [IsAuthenticated]
Вернуться на верх