Django REST的JSON Web令牌不会对用户数据库

时间:2015-11-01 23:50:02

标签: django django-rest-framework jwt django-rest-auth

我有一个有效的Django REST API后端。我之前使用的是会话身份验证,但我希望转移到基于令牌以进行跨多个服务器的扩展。我已经研究了这几天了,我还没有找到问题的答案。我将djangorestframework-jwt包添加到我的应用程序中,但是当我尝试进行身份验证时总是返回:

{"non_field_errors":["Unable to login with provided credentials."]}

我在jwt包中看到了这个错误,并且可以通过身份验证过程返回代码。我没有在auth进程中看到任何错误。当我尝试使用这些凭据创建用户时,它表示用户已经存在,因此我知道它正在访问正确的用户表。我不确定为什么obtain_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命令

curl -d "email=test@myemail.com&password=test123" http://webhost.mywebsite.com:8080/api/login/

2 个答案:

答案 0 :(得分:1)

我的设置非常相似。一个简单的应用程序,利用vanilla DRF JWT身份验证。我能说的唯一区别是我在我的INSTALLED_APPS列表中包含了rest_framework_jwt:

INSTALLED_APPS = (
    ...
    # Third Party Dependencies
    'rest_framework',
    'rest_framework_jwt',
    'corsheaders',
    ....

尝试添加并查看它的位置。

答案 1 :(得分:0)

我也遇到了同样的问题,终于找到了出路。

按照快速入门指南(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}