Как мне запросить данные из базы данных о пользователе в полностью отдельном интерфейсе Django REST

#reactjs #django #django-rest-framework

Вопрос:

Итак, у меня есть эта базовая модель:

 class Text(models.Model):

    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=255)

    def __str__(self):

        return self.title
 

поэтому обычно, когда вы используете обычный Django и хотите выполнить запрос Text из базы данных на основе пользователя, вы бы сделали:

 def main_page(request):

    userTexts = Text.objects.filter(user=request.user)

    context = {}
    return render(request, '', context)
 

но теперь я использую стек Django REST React и создал полностью отдельный интерфейс, и единственный способ доступа к данным из бэкенда-это сделать HTTP-запрос к нему, так что теперь request.user он больше не будет работать, потому что он просто вернется anonymousUser

к счастью, хотя у меня уже работает система аутентификации и в моем состоянии реакции уже есть объект пользователя, все, что мне нужно сделать, это создать представление и вызов API для запроса данных с серверной части, но я не могу себе представить, как сделать и то, и другое.

Ответ №1:

На самом деле, здесь не имеет значения, как вы пытаетесь получить доступ к внутреннему URL-адресу, напрямую вставляя его в панель браузера или используя xhr React.

Вам просто нужно установить файлы cookie сеанса для внутреннего URL ( domain.com:port ), который недоступен с помощью javascript в идеальном мире:

Файл cookie с атрибутом HttpOnly недоступен для API JavaScript Document.cookie; он отправляется только на сервер. Например, файлы cookie, сохраняющие сеансы на стороне сервера, не обязательно должны быть доступны для JavaScript и должны иметь атрибут HttpOnly. Эта мера предосторожности помогает смягчить атаки с использованием межсайтовых сценариев (XSS).

anonymousUser означает, что файл cookie сеанса не установлен и процесс аутентификации (входа в систему) не завершен.
Почему это происходит? Я не знаю, это зависит от архитектуры бэкенда, деталей процесса входа в систему и т. Д…

И не забудьте установить правильные политики CORS, если интерфейсы и бэкенды domain.com:port отличаются.