У меня был pet-api (тестирование api) без аутентификации. Я пытаюсь узнать, как реализовать oath2 для повышения безопасности моего приложения.

Я хотел бы получить доступ к моделям моего приложения через вызов запроса, используя API, а также через панель администратора Django.

Я следую этому руководству: https: // medium.com/@halfspring/guide-to-an-oauth2-api-with-django-6ba66a31d6d

Для настройки: django-oauth-toolkit

Учебник говорит, что я должен добавить этот код в настройки:

 AUTHENTICATION_BACKENDS = (
     'django.contrib.auth.backends.ModelBackend' # To keep the Browsable API
     'oauth2_provider.backends.OAuth2Backend',
 )

Но когда я запускаю сервер и пытаюсь получить доступ к / admin, я получаю:

ModuleNotFoundError at /admin/login/
No module named 'django.contrib.auth.backends.ModelBackendoauth2_provider'; 'django.contrib.auth.backends' is not a package

Если я прокомментирую:

# 'django.contrib.auth.backends.ModelBackendoauth2_provider'; 

Я могу получить доступ к интерфейсу для входа в систему, но говорит, что мой пользователь или пароль неверны (это не так).

Комментируя обе строки, я могу получить доступ к панели администратора без проблем:

#AUTHENTICATION_BACKENDS = (
    # 'django.contrib.auth.backends.ModelBackend' # To keep the Browsable API
    # 'oauth2_provider.backends.OAuth2Backend',
#) 
1
Omar Gonzales 29 Май 2019 в 18:21

2 ответа

Лучший ответ

В коде есть ошибка,

AUTHENTICATION_BACKENDS = (
 'django.contrib.auth.backends.ModelBackend' # To keep the Browsable API
 'oauth2_provider.backends.OAuth2Backend',
)

После 'django.contrib.auth.backends.ModelBackend' отсутствует запятая (,), поэтому обе строки считаются одной строкой, как видно из ошибки.

Так что вам нужно было сделать просто

AUTHENTICATION_BACKENDS = (
 'django.contrib.auth.backends.ModelBackend', # To keep the Browsable API
 'oauth2_provider.backends.OAuth2Backend',
)

Теперь будет работать ...

2
Mudit Joshi 26 Июн 2019 в 09:27

Все хорошо, у меня сейчас хорошо работает без него. Я также следую этому руководству. Просто продолжайте http://127.0.0.1:8000/o/applications.

Кстати, я также комментирую ALLOWED_HOSTS = ['0.0.0.0'] и в файле users / views.py я изменил все http://0.0.0.0:8000 на http://127.0.0.1:8000.

И теперь я получаю это:

{
    "access_token": "C2qukd1zWz9aGSp652qbnpYjoT6ZRx",
    "expires_in": 36000,
    "token_type": "Bearer",
    "scope": "read write",
    "refresh_token": "UoI0r9J09F3kcXGO1q3KsYoGHQ9DBw"
}
1
Nick T 19 Июн 2019 в 18:36
56363885