Как получить объект пользователя в Django REST через фронтенд React

После того, как пользователь вошел в приборную панель, я хочу также получить объект пользователя, чтобы заполнить приборную панель соответствующими данными. Сейчас логин с использованием DJ_rest_auth работает отлично, но я не знаю, как дальше получать данные.

Мой подход:

  • Пользователь входит в систему
  • При успехе обработчик выборки вызывает другую выборку getUser, которая использует только что установленный токен из локального хранилища, чтобы сделать еще один запрос API для получения экземпляра пользователя
  • .

В Django у меня есть модель 1-1 UserProfile, связанная с моделью BaseUser. Также dj_rest_auth хранит токен 1-1 в модели BaseUser.

Сейчас утилита getUser вообще не вызывается в обратном вызове ответа на выборку. Также я не уверен, что это вообще осуществимый подход.

// React Login Component

const Login = () => {

    // Set reducer with empty dicitonary as initial value
    const [username, setUsername] = useState('');
    const [password, setPassword] = useState('');
    const [errors, setErrors] = useState(false);
    const [loading, setLoading] = useState(true);

    useEffect(() => {
        if (localStorage.getItem('token') !== null) {
          window.location.replace('http://localhost:3000/dashboard');
        } else {
          setLoading(false);
        }
    }, []);

    const submitHandler = event => {
        event.preventDefault()

        const user = {
          username: username,
          password: password
        };

        fetch('http://127.0.0.1:8000/api/user/auth/login/', {
            method: 'POST',
            body: JSON.stringify(user),
            headers: {'Content-Type': 'application/json'},
        })
        .then(res => res.json())
        .then(data => {
            if (data.key) {
              localStorage.clear();
              localStorage.setItem('token', data.key);

              // Get the user object instance via another API request
                getUser(data.key)

              // Redirect to Dashboard
              window.location.replace('http://localhost:3000/dashboard/planner');
        } else {
          setUsername('');
          setPassword('');
          localStorage.clear();
          setErrors(true);
        }});
    }
// React getUser util function

export const getUser = (token) => {

    fetch('http://127.0.0.1:8000/api/user/object/', {
      method: 'GET',
      body: JSON.stringify(token),
      headers: {
        'Content-Type': 'application/json',
      }
    })
      .then(res => res.json())
      .then(data => {
        console.log(data);
      });
  };
// Django view

class UserDetail(APIView):
    """
    Retrieve, update or delete a Offer instance
    """
    def get_object(self, token):
        print(token)
        print('test')
        try:
            return UserProfile.objects.get(user__tokens=token)
        except UserProfile.DoesNotExist:
            raise Http404

    def get(self, request, token):
        print('test2')
        user = self.get_object(token)
        serializer = UserProfileSerializer(user)
        return Response(serializer.data)
// Django Model

class UserProfile(models.Model):
    """
    Extends Base User 1-1
    """
    # Relations
    user = models.OneToOneField(User, on_delete=models.CASCADE)
..
Вернуться на верх