Как передать пользователя в запросе для 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) должен сделать, чтобы получить доступ к этим ресурсам:
- Авторизуйте пользователя.
- Авторизуйте этого пользователя для каждого запроса.
Существует множество способов обработки каждого из этих шагов. Для аутентификации вы можете отправить имя пользователя и пароль. В вашем случае, похоже, что Auth0 отправит код на электронную почту пользователя, который он должен будет ввести.
В схемах аутентификации, с которыми я знаком, этот шаг создает токен, который идентифицирует пользователя, прошедшего аутентификацию. Затем вы должны отправить этот маркер с каждым запросом для авторизации этого конкретного запроса.
Я думаю, что вы упустили последнюю часть, поскольку вы делаете только fetch('/test')
. Вам нужно добавить к этому, чтобы авторизовать пользователя для вашей конечной точки. Есть много способов сделать это. Наиболее распространенным, по моему опыту, является заголовок Authorization
в запросе.