Ошибка 403 при запросах к серверу на Django с сайта на React

Впервые разрабатываю сайт как фронтенд (использую JS и React) и столкнулся с проблемой при отправке запросов к серверу. При любых попытках сделать GET/PUT/POST к серверу получаю ошибку 403. Прочитав кучу вопросов, я понял, что не отправляю в заголовке токен. Но вот где его брать/генерировать я не понимаю. Как работает вся эта концепция с аутентификацией пользователя и его запросов?

Код сервера:

class ProfileView(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request):
        try:
            profile = UserProfile.objects.get(user=request.user)
        except UserProfile.DoesNotExist:
            return Response({"error": "Profile not found"}, status=status.HTTP_404_NOT_FOUND)

        serializer = UserProfileSerializer(profile)
        return Response(serializer.data)

    def put(self, request):
        try:
            profile = UserProfile.objects.get(user=request.user)
        except UserProfile.DoesNotExist:
            return Response({"error": "Profile not found"}, status=status.HTTP_404_NOT_FOUND)

        serializer = UserProfileSerializer(profile, data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Код клиента:

import React, { useState, useEffect } from "react";
import { Link } from "react-router-dom";
import axios from "axios";

const Authorization = () => {
    const [username, setUsername] = useState(''); 
    const [password, setPassword] = useState('');

    const auth = (e) => {
        e.preventDefault();
        axios.get('http://127.0.0.1:8000/api/profile/', {
            user: 'maksi',
        })
        .then(response => {
            console.log(response.data);
        })
        .catch(error => {
            console.error('There was an error posting the data!', error);
        });
    };
    return (
        <form 
            class='auth_form' 
            className="w-[630px] h-[633px] flex flex-col items-center px-[89px] py-[57px] gap-16 rounded-3xl border-[0.3px] border-[#B9B9B9] mx-auto mt-[calc(50vh-633px/2-0.32px)]"
            onSubmit={auth}>
            <h1 class='auth_title' className="text-[32px] font-gilroy_bold text-[#202224]">Авторизация</h1>
            <div class='auth_inputs'>
                <p class='field_title' id='login' className="font-gilroy_semibold text-[18px] text-[#202224] opacity-80 mb-[19px]">Логин</p>
                <input class='input_field' type='text' id='login' 
                className="w-[516px] h-[56px] rounded-lg bg-[#F1F4F9] border-[#D8D8D8] border-[1px] mb-[40px]"
                value={username} 
                onChange={(e) => setUsername(e.target.value)}
                />
                <p class='field_title' id='password' className="font-gilroy_semibold text-[18px] text-[#202224] opacity-80 mb-[19px]">Пароль</p>
                <input class='input_field' type='password' id='password' 
                className="w-[516px] h-[56px] rounded-lg bg-[#F1F4F9] border-[#D8D8D8] border-[1px]"
                value={password} 
                onChange={(e) => setPassword(e.target.value)}
                />
            </div>
            <button type='submit' className="w-[418px] h-[56px] rounded-lg bg-[#0077EB] opacity-90 border-0 font-gilroy_bold text-[20px] text-white">Войти</button>
            </form>
    );
};

export default Authorization;
Вернуться на верх