Registro, login y logout de usuarios con Django Rest Framework y JWT (parte IV y fin)

Terminamos esta serie de artículos sobre el registro, login y logout de usuarios en Django RestFramework, con un pequeño añadido.

Vamos a personalizar la vista para que la respuesta que nos de el login, no sea solamente los token access y token refresh, sino que además incluya otra información en la info que devuelva del usuario.

Como decía, vamos a crear una vista personalizada y allí incluiremos la información del usuario que nos interese recoger en el login.

Lo primero será editar el fichero views.py y añadir lo siguiente:

from rest_framework_simplejwt.views import TokenObtainPairView
...
class CustomTokenObtainPairView(TokenObtainPairView):
    def post(self, request, *args, **kwargs):
        response = super().post(request, *args, **kwargs)
        if response.status_code == status.HTTP_200_OK:
            user = User.objects.get(username=request.data['username'])
            user_info = {
                'user_id': user.id,
                'username': user.username,
                'email': user.email,
                'first_name': user.first_name,
                'last_name': user.last_name,
            }
            response.data.update(user_info)
        return response

Con este nuevo método, personalizamos la vista de login y además del token, recogemos otra info que nos interese del usuario. En este caso: el id, el email, el nombre y los apellidos:

user_info = {
                'user_id': user.id,
                'username': user.username,
                'email': user.email,
                'first_name': user.first_name,
                'last_name': user.last_name,
            }

Ahora, modificamos el path de urls.py de users para acceder a esta vista y no a la de token que montaría por defecto simplejwt y DRF

from django.urls import path
from .views import LogoutView, UserRegistrationView, CustomTokenObtainPairView

urlpatterns = [
    # URL PARA EL REGISTRO
    path('register/', UserRegistrationView.as_view(), name='user-registration'),
    # URL PARA EL LOGIN
    path('token/',CustomTokenObtainPairView.as_view(), name='token'),
    # URL PARA EL LOGOUT
    path('logout/', LogoutView.as_view(), name='logout_token'),
]

Comentando la linea por defecto de urls.py general del proyecto:

  # URLS DE VALIDACION DEL TOKEN
    #path('api/token/', jwt_views.TokenObtainPairView.as_view(), name='token_obtain_pair'),

A partir de ahora, cuando queramos hacer el login, accederemos a http://localhost:8080/users/token/

Si validamos un usuario registrado, veremos que además de los tokens, la sesión nos devolverá el resto de información que hemos determinado en el método personalizado.

Como siempre, podemos comprobar que todo funciona correctamente, accediendo a la API desde Postman

Hasta aquí ha llegado esta serie de post dedicados a un tema tan importante en cualquier aplicación, como es el registro, login y logout de usuarios.

Os dejo el código usado para esta demo en mi cuenta de Github, para que podaís investigarlo y utilizarlo como os plazca.

Publicada el
Categorizado como Desarollo Etiquetado como ,

Por Jose Manuel Sanz Prieto

Desarrollador web. En este blog hablo de fotografía, programación con Django, Python, PHP y privacidad.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *