6

Sto progettando di creare un'applicazione con Django Rest Framework. Sono più interessato all'utilizzo del meccanismo di autenticazione Django-Rest-Framework-JWT rispetto a Sessione o Meccanismo di autenticazione del token.DRF: come integrare django-rest-framework-jwt su Djoser

Ma tutti gli altri pacchetti come Django-Rest-Auth e Djoser (che aiuta nel processo di registrazione) utilizza il sistema di sessione e token di autenticazione.

Come faccio a ignorare il meccanismo di autenticazione token in Djoser o Django-Rest-Auth con Django-Rest-quadro-JWT?

risposta

11

So che questa domanda è quasi un anno, ma ho appena capito come ottenere Djoser e django-resto-knox stare al gioco e abbastanza sicuro la stessa tecnica ha lavorato con djangorestframework-JWT come bene. Il trucco è sapere che è possibile utilizzare gli endpoint dell'account di Djoser senza utilizzare i relativi endpoint relativi all'autenticazione. Devi solo mettere ciascuna libreria sul proprio endpoint.

Ecco come ho creato Django Resto Framework da utilizzare JWTs per accedere e autenticazione endpoint Djoser (ho intenzione di prenderlo dall'inizio alla fine):

In primo luogo, installare djangorestframework-JWT e Djoser:

:

pip install djangorestframework-jwt djoser 

specificare che si desidera utilizzare per l'autenticazione JWTs aggiungendo JSONWebTokenAuthentication a DEFAULT_AUTHENTICATION_CLASSES in di settings.py progetto Django

REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': (
     'rest_framework.permissions.IsAuthenticated', 
    ), 
    'DEFAULT_AUTHENTICATION_CLASSES': (
     'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 
    ), 
} 

Successivamente, aggiungere djoser.urls e rest_framework_jwt di obtain_jwt_token vista gli 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'), 
] 

Che dovrebbe essere tutto ciò che serve per iniziare.Giusto per essere sicuro, eseguire un migrate (mi sono girato un esempio nuovo di zecca di Django Riposo Quadro per questo post e non avevano ancora eseguire i commit iniziali prima di questo punto):

python manage.py migrate 

per verificare le cose fuori, creare un nuovo utente, se non ne hai già uno:

python manage.py createsuperuser 

una volta che avete un account utente, runserver e quindi prova ad accedere di ottenere il vostro JWT:

http POST http://localhost:800/auth/login/ username = admin password = la password

Si dovrebbe tornare un gettone:

{ 
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM" 
} 

È quindi possibile utilizzare questo token per l'autenticazione contro /me/ endpoint di Djoser per ottenere le informazioni del profilo. Basta inserire il token nel colpo di testa di richiesta come Autorizzazione: JWT:

http http://localhost:8000/account/me/ "Autorizzazione: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM"

Ecco quello che ho ottenuto di nuovo:

{ 
    "email": "", 
    "id": 2, 
    "username": "admin" 
} 

Come potete vedere, è piuttosto facile iniziare da noi ing JWT per l'autenticazione. La mia ipotesi è che le librerie come djoser e django-rest-auth si concentrino sull'autenticazione di base, di sessione o di token perché sono incluse nella casella DRF e quindi sono probabilmente il metodo più comune con cui le persone autenticano le chiamate contro il loro server.

La bellezza di tutto questo è che è facile implementare uno schema di autenticazione più sicuro perché Djoser non è strettamente connesso alle sue classi di autenticazione - sarà felice di rispettare qualsiasi cosa tu abbia impostato per DEFAULT_AUTHENTICATION_CLASSES.

+1

Djoser ha recentemente ottenuto il supporto per JWT basato su djangorestframework-jwt - http://djoser.readthedocs.io/en/latest/getting_started.html#installation e http://djoser.readthedocs.io/en/latest/ authentication_backends.html # jSON-web-token-autenticazione –