2017-11-06 5 views
0

Ich habe ein Problem mit Token-Authentifizierung. Ich habe meine Django-App mit Django in Server eingebaut.django restframework token Authentifizierung fehlgeschlagen mit "ungültiges Token"

$python manage.py runserver 

Meine App urls.py

from rest_framework_jwt.views import obtain_jwt_token 
from .views import LectureCreateView 

urlpatterns = [ 
    ... 
    url(r'^api/user_auth/$', obtain_jwt_token), 
    url(r'^api/lecture/create/$', LectureCreateView.as_view()), 
] 

Meine App models.py

from rest_framework.authentication import TokenAuthentication 
from rest_framework.permissions import IsAuthenticated 

class LectureStartView(APIView): 
    permission_classes = (IsAuthenticated,) 
    authentication_classes = (TokenAuthentication,) 

    def post(self, request): 
     ... 

und settings.py

... 
INSTALLED_APPS = [ 
... 

    # Rest framework 
    'rest_framework', 
    'rest_framework.authtoken', 


    'myApp', 
] 
... 


REST_FRAMEWORK = { 
    # other settings... 

    'DEFAULT_AUTHENTICATION_CLASSES': [ 
     'rest_framework.authentication.TokenAuthentication', 
    ], 
    'DEFAULT_PERMISSION_CLASSES': [ 
     'rest_framework.permissions.IsAuthenticated', 
    ], 
} 

möchte ich mit Token-Auth. Ich habe Token erfolgreich ausgestellt.

POST '... api/user_auth /' { "username": "test", "Passwort": "blahbalh123" }

{ 
     "token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IjIwMTMyMzA2Iiwib3JpZ19pYXQiOjE1MDk5NzA5NjcsInVzZXJfaWQiOjMsImVtYWlsIjoiaW50ZXJydXBpbmdAbmF2ZXIuY29tIiwiZXhwIjoxNTA5OTcxNTY3fQ.acwqAP4sBPZWYPC0GfgL3AZarNz4Opb_5P4RewZJYrI" 
} 

aber ich Auth nicht mit Token

Anfrage:

POST ...api/lecture/create/ HTTP/1.1 
Host: 127.0.0.1:8000 
Authorization: Token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IjIwMTMyMzA2Iiwib3JpZ19pYXQiOjE1MDk5NzA5NjcsInVzZXJfaWQiOjMsImVtYWlsIjoiaW50ZXJydXBpbmdAbmF2ZXIuY29tIiwiZXhwIjoxNTA5OTcxNTY3fQ.acwqAP4sBPZWYPC0GfgL3AZarNz4Opb_5P4RewZJYrI 

Antwort:

Status: 401 Unauthorized 

Allow →GET, POST, HEAD, OPTIONS 
Content-Length →27 
Content-Type →application/json 
Date →Mon, 06 Nov 2017 12:59:17 GMT 
Server →WSGIServer/0.1 Python/2.7.13 
Vary →Accept 
WWW-Authenticate →Token 
X-Frame-Options →SAMEORIGIN 

{ 
    "detail": "Invalid token." 
} 

Was ist falsch an meinem Code? Entschuldigung für meine Englischkenntnisse.

Antwort

1

Ich denke, Sie mischen die Token von Django-Rest-Framework und REST-Framework JWT.

In den DJR Dokumentationen sagt:

from rest_framework.authtoken import views from .views import LectureCreateView urlpatterns = [ ... url(r'^api/user_auth/$', views.obtain_auth_token), url(r'^api/lecture/create/$', LectureCreateView.as_view()), ]

Ich hoffe, dass es Ihnen helfen kann:

from rest_framework.authtoken import views urlpatterns += [ url(r'^api-token-auth/', views.obtain_auth_token) ]

Sie Ihren Code mit ersetzen soll.