JSON Web Token для Django REST не будет проходить аутентификацию в базе данных пользователей
У меня есть рабочий бэкэнд Django REST API. Ранее я использовал сеансовую аутентификацию, но хотел бы перейти на токен для масштабирования между несколькими серверами. Я исследовал это в течение пары дней, и я не нашел ответа на свою проблему. Я добавил пакет djangorestframework-jwt в свое приложение, но при попытке аутентификации всегда возвращается:
{"non_field_errors":["Unable to login with provided credentials."]}
Я вижу в пакете jwt, где эта ошибка, и могу следовать за кодом обратно через процесс аутентификации. Я не вижу никаких ошибок в процессе аутентификации. Когда я пытаюсь создать пользователя с этими учетными данными, он говорит, что пользователь уже существует, поэтому я знаю, что он попадает в правильную таблицу пользователей. Я не уверен, почему конечная точка receive_jwt_token не будет аутентифицировать мои учетные данные. Ниже приведены соответствующие разделы моего приложения Django. Любая помощь будет принята с благодарностью. Если я оставляю что-либо, что может помочь выяснить это, пожалуйста, дайте мне знать, и я загрузлю это. Спасибо,
Приложение /settings.py
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 100,}
Приложение /urls.py
urlpatterns = patterns('',
# Api
url(r'^api/', include(router.urls)),
url(r'^api/stats', statsviews.StatsView.as_view()),
url(r'^api/testing', statsviews.TestView.as_view()),
url(r'^api/login', 'rest_framework_jwt.views.obtain_jwt_token'),
url(r'^api/logout', logout, {'next_page': '/api/login'}),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
)
команда скручивания
curl -d "email=test@myemail.com&password=test123" http://webhost.mywebsite.com:8080/api/login/
2 ответа
У меня есть очень похожие настройки для вас. Простое приложение, использующее аутентификацию DRF JWT ванили. Единственное отличие, которое я могу сказать, состоит в том, что в моем списке INSTALLED_APPS есть rest_framework_jwt:
INSTALLED_APPS = (
...
# Third Party Dependencies
'rest_framework',
'rest_framework_jwt',
'corsheaders',
....
Попытайтесь добавить это и посмотрите, куда это вас приведет.
Я тоже столкнулся с той же проблемой и наконец нашел выход.
следуя краткому руководству по началу работы ( http://www.django-rest-framework.org/tutorial/quickstart/), используя python manage.py migrate
создать структуру таблицы; с помощью python manage.py createsuperuser
создать первоначального пользователя с именем admin с паролем "password123"; (внимание: пароли не совпадают в руководствах)
теперь все должно быть в порядке.
$ curl -X POST -d "username=admin&password=password123" http://127.0.0.1:8000/api-token-auth/
{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwidXNlcl9pZCI6MiwiZW1haWwiOiJhZG1pbkA3amdvLmNvbSIsImV4cCI6MTQ3MDY0NjY4Mn0.Dg4KW5pHHJfuaRzjqHTu8kYIzkq8js9}