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]