Как я могу получить текущего зарегистрированного пользователя из токена django-oauth-toolkit?

#django #oauth #auth0 #django-oauth

#django #oauth #auth0 #django-oauth

Вопрос:

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

У меня есть представление, которое вызывается после проверки подлинности приложения, и мне нужно, чтобы это представление возвращало сведения о текущем вошедшем в систему пользователе.

urls.py:

 # Return current logged in user
(r'^user/current/?$',
 'my_app.views.current_user.get_user',
 {},
 'current_user'),
  

views/current_user.py:

 import json
from django.http import HttpResponse
from oauth2_provider.decorators import protected_resource


@protected_resource()
def get_user(request):
    user = request.user
    return HttpResponse(
        json.dumps({
            'username': user.username, 
            'email': user.email}),
        content_type='application/json')
  

request.user возвращает AnonymousUser вместо пользователя, которому принадлежит токен.

Как я могу получить доступ к пользователю Django, связанному с токеном, выданным django-oauth-toolkit?

Ответ №1:

Оказывается, если вы загружаете правильное промежуточное программное обеспечение и серверную часть аутентификации, как указано в документации, request.user возвращает правильного пользователя.

 AUTHENTICATION_BACKENDS = (
'oauth2_provider.backends.OAuth2Backend',
# Uncomment following if you want to access the admin
#'django.contrib.auth.backends.ModelBackend'
'...',
)

MIDDLEWARE_CLASSES = (
    '...',
    # If you use SessionAuthenticationMiddleware, be sure it appears before OAuth2TokenMiddleware.
    # SessionAuthenticationMiddleware is NOT required for using django-oauth-toolkit.
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'oauth2_provider.middleware.OAuth2TokenMiddleware',
    '...',
)