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
.
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 –