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.