У меня был пет-апи (тестовый апи) без аутентификации. Я пытаюсь узнать, как реализовать oath2, чтобы повысить безопасность моего приложения.
I'd like to access the models of my app through a request call using the API but also through the Django Admin Panel.
Я следую этому руководству: 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',
#)
Все в порядке, мой работает хорошо и без него. Я тоже следую этому руководству. Просто продолжайте http://127.0.0.1:8000/о/приложения.
Кстати, я также комментирую 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"
}
В коде ошибка,
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',
)
Теперь будет работать...