with simple rest_framework_jwt obtain jwt_response_payload_handler framework djoser auth django authentication django-rest-framework jwt django-rest-auth

simple - obtain json web token django rest framework



DRF: cómo integrar django-rest-framework-jwt a Djoser (1)

Sé que esta pregunta tiene casi un año, pero descubrí cómo lograr que Djoser y django-rest-knox actúen y, por supuesto, la misma técnica también funcionó con djangorestframework-jwt . El truco está en saber que puedes usar los puntos finales de la cuenta de Djoser sin usar los puntos finales relacionados con la autenticación . Solo debe colocar cada biblioteca en su propio punto final.

Así es como configuré Django Rest Framework para usar JWTs para iniciar sesión y autenticar contra los extremos de Djoser (lo voy a tomar de principio a fin):

Primero, instale djangorestframework-jwt y djoser :

pip install djangorestframework-jwt djoser

Especifique que desea usar JWT para autenticarse agregando JSONWebTokenAuthentication a DEFAULT_AUTHENTICATION_CLASSES en la settings.py su proyecto Django:

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

A continuación, agregue djoser.urls y rest_framework_jwt''s obtain_jwt_token view a sus urls:

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''), ]

Eso debería ser todo lo que necesita para comenzar. Solo para estar seguro, ejecute una migrate (configuré una nueva instancia de Django Rest Framework para esta publicación y aún no había ejecutado las confirmaciones iniciales antes de este punto):

python manage.py migrate

Para probar cosas, crea un nuevo usuario si aún no tienes uno:

python manage.py createsuperuser

Una vez que tenga una cuenta de usuario, runserver e intente iniciar sesión para obtener su JWT:

http POST http: // localhost: 800 / auth / login / username = admin password = contraseña

Deberías recuperar un token:

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

A continuación, puede usar este token para autenticarse contra / me / endpoint de Djoser para obtener su información de perfil. Simplemente incluya su token dentro del encabezado de su solicitud como Autorización: JWT :

http http: // localhost: 8000 / cuenta / Me / "Autorización JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM"

Esto es lo que recibí:

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

Como puede ver, es bastante fácil comenzar a usar JWT para la autenticación. Supongo que las bibliotecas como djoser y django-rest-auth se centran en la autenticación básica, de sesión o de token porque están incluidas en el recuadro DRF y, por lo tanto, son probablemente el método más común mediante el cual las personas autentican las llamadas en su servidor.

La belleza de todo esto es que es fácil implementar un esquema de autenticación más seguro porque Djoser no está estrechamente vinculado a sus propias clases de autenticación, respetará felizmente lo que establezca para DEFAULT_AUTHENTICATION_CLASSES .

Estoy planeando crear una aplicación con Django Rest Framework . Estoy más interesado en utilizar el mecanismo de autenticación Django-Rest-Framework-JWT que en el mecanismo de autenticación de sesión o token .

Pero todos los otros paquetes, como Django-Rest-Auth y Djoser (que ayuda en el proceso de registro) utilizan el sistema de autenticación de sesión y token.

¿Cómo anulo el mecanismo de autenticación Token en Djoser o Django-Rest-Auth con Django-Rest-Framework-JWT ?