2015-11-01 159 views
0

我有一個可以工作的Django REST API後端。我以前使用會話身份驗證,但希望移動到基於令牌的跨多個服務器的擴展。我已經研究了幾天,現在還沒有找到解決問題的答案。我加入了djangorestframework,智威湯遜包到我的應用程序,但是當我嘗試驗證總是返回:用於Django REST的JSON Web令牌不會向用戶數據庫驗證

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

我在智威湯遜包凡這個錯誤,並且可以按照後面的代碼通過認證過程中看到。我在auth過程中沒有看到任何錯誤。當我嘗試使用這些憑據創建用戶時,它說用戶已經存在,所以我知道它正在擊中正確的用戶表。我不確定爲什麼gets_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 protected]&password=test123" http://webhost.mywebsite.com:8080/api/login/ 
+0

您是否已將rest_framework_jwt添加到您的INSTALLED_APPS列表中? –

+1

文檔中沒有任何內容說明它需要添加到INSTALLED_APPS。我只是說要將它添加到DEFAULT_AUTHENTICATION_CLASS – joed4no

+0

將rest_framework_jwt添加到已安裝的應用程序。無論出於何種原因,他們都將這些文件留在了文檔中。 – user1042361

回答

0

我有一個非常類似的設置給你。一個簡單的應用程序,利用香草DRF JWT認證。那我可以告訴唯一的區別是,我rest_framework_jwt列入我INSTALLED_APPS列表:

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

嘗試添加並看到它得到你。

+0

它沒有讓我到任何地方 – Kakaji

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} 
+0

這工作,但它爲什麼不與用API創建的用戶工作?密碼以相同的方式存儲。 – Kakaji

相關問題