Как передать пользователя в запросе для Auth0? (React Frontend и Django Backend)

Я создаю веб-приложение и пытаюсь использовать Auth0 для аутентификации пользователей. Я хочу защитить некоторые конечные точки, где пользователь должен войти в систему, чтобы иметь возможность успешно получить доступ к конечной точке.

Я следовал этому руководству по настройке Django с Auth0, и все прошло отлично.

(https://auth0.com/docs/quickstart/webapp/django/01-login)

Однако я хочу иметь возможность регистрироваться во фронтенде (React), чтобы иметь доступ к защищенным конечным точкам на моем бэкенде Django.

Вот что у меня есть для моей конечной точки, которую я тестирую.

views.py

from django.http import JsonResponse

def test(request):
    user = request.user
    if user.is_authenticated:
        return JsonResponse({ 'outcome': 'success'}) 
    else:
        return JsonResponse({ 'outcome': 'failure'})

Эта конечная точка называется path('test/', views.test), в моем urls.py.

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

templates/index.html

<div class="login-box auth0-box before">
    <img src="https://i.cloudup.com/StzWWrY34s.png" />
    <h3>Auth0 Example</h3>
    <p>Zero friction identity infrastructure, built for developers</p>
    <a class="btn btn-primary btn-lg btn-login btn-block" href="/login/auth0">Log In</a>
</div>

Однако проблема возникает, когда я пытаюсь войти в систему через фронтенд React. Я не могу заставить JsonResponse быть "успешным" и продолжаю получать "неудачу".

fetch('test/')
    .then(response => response.json())
    .then(data => console.log(data));

Из бэкенда я вижу, что нам нужно сделать request.user для получения пользователя, а затем сделать user.is_authenticated для проверки.

Однако в моем запросе на выборку я этого не делаю.

Итак, мой вопрос в том, как мне вставить пользователя в мой запрос на выборку?

Большое спасибо!

EDIT:

Код фронтенда

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

Во-первых, когда вы защищаете ресурсы на вашем сервере (в данном случае код Django), есть два шага, которые фронтенд (в вашем случае React) должен сделать, чтобы получить доступ к этим ресурсам:

  1. Авторизуйте пользователя.
  2. Авторизуйте этого пользователя для каждого запроса.

Существует множество способов обработки каждого из этих шагов. Для аутентификации вы можете отправить имя пользователя и пароль. В вашем случае, похоже, что Auth0 отправит код на электронную почту пользователя, который он должен будет ввести.

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

Я думаю, что вы упустили последнюю часть, поскольку вы делаете только fetch('/test'). Вам нужно добавить к этому, чтобы авторизовать пользователя для вашей конечной точки. Есть много способов сделать это. Наиболее распространенным, по моему опыту, является заголовок Authorization в запросе.

Вернуться на верх