Я знаю, что этому вопросу почти год, но я только что понял, как заставить Djoser и django-rest-knox подыгрывать, и, конечно же, тот же метод работал с djangorestframework-jwt. Уловка заключается в том, чтобы знать, что вы можете использовать конечные точки учетной записи Djoser без использования конечных точек, связанных с авторизацией. Вам просто нужно разместить каждую библиотеку на отдельной конечной точке.
Вот как я настроил Django Rest Framework для использования JWT для входа в систему и аутентификации на конечных точках Djoser (я собираюсь пройти это от начала до конца):
Сначала установите djangorestframework-jwt и djoser:
pip install djangorestframework-jwt djoser
Укажите, что вы хотите использовать JWT для аутентификации, добавив JSONWebTokenAuthentication в DEFAULT_AUTHENTICATION_CLASSES в settings.py вашего проекта Django:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
}
Затем добавьте представление djoser.urls и rest_framework_jwt obtain_jwt_token к своим URL-адресам:
from django.conf.urls import url, include
from rest_framework_jwt import views as jwt_views
urlpatterns = [
url(r'^account/', include('djoser.urls')),
url(r'^auth/login/', jwt_views.obtain_jwt_token, name='auth'),
]
Это должно быть все, что вам нужно для начала. На всякий случай запустите migrate (я создал совершенно новый экземпляр Django Rest Framework для этого поста и до этого момента еще не выполнял начальные коммиты):
python manage.py migrate
Чтобы проверить ситуацию, создайте нового пользователя, если у вас его еще нет:
python manage.py createsuperuser
Если у вас есть учетная запись пользователя, runserver, а затем попробуйте войти в систему, чтобы получить свой JWT:
http POST http://localhost:800/auth/login/ имя пользователя = пароль администратора = пароль
Вы должны получить обратно токен:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM"
}
Затем вы можете использовать этот токен для аутентификации на конечной точке Djoser / me /, чтобы получить информацию вашего профиля. Просто укажите свой токен в заголовке запроса как Авторизация: JWT:
HTTP HTTP: // локальный: 8000 / счет / мне / "Авторизация: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM"
Вот что я получил в ответ:
{
"email": "",
"id": 2,
"username": "admin"
}
Как видите, начать использовать JWT для аутентификации довольно просто. Я предполагаю, что библиотеки, такие как djoser и django-rest-auth, ориентированы на базовую аутентификацию, аутентификацию сеанса или токена, потому что они включены из коробки DRF и, следовательно, вероятно наиболее распространенный метод, с помощью которого люди аутентифицируют вызовы своего сервера.
Прелесть всего этого в том, что легко реализовать более безопасную схему аутентификации, потому что Djoser не тесно связан со своими собственными классами аутентификации - он с радостью будет уважать все, что вы установили для DEFAULT_AUTHENTICATION_CLASSES.
person
IAmKale
schedule
22.03.2016