Django rest framework – Changer le json du login du TokenAuthentication

Le login avec Django Rest Framework et le TokenAuthentication

Le TokenAuthentication à un fonctionnement extrêmement simple, à la connexion l’API retourne un token qu’il faut ensuite passer dans le Header de chaque requête nécessitant d’être connecté.

Le truc vraiment cool, c’est que TokenAuthentication propose directement une view qui s’occupe de connecter un utilisateur.

Il suffit d’ajouter les lignes suivantes dans urls.py

urlpatterns += patterns('',
    url(r'^api-token-auth/', 'rest_framework.authtoken.views.obtain_auth_token')
)

En appelant avec curl l’api, on récupère le token :

$ curl -X POST http://127.0.0.1:8000/api-token-auth/ -d 'username=mon@mail.com&password=1234'
{"token": "e4dcf12d52f04f654e85e7f409ae524f58b9a7g7"}

Récupérer plus d’info !

Récupérer le token c’est cool, mais ce qui pourrait être pratique c’est de récupérer plus d’infos (comme l’id de l’utilisateur par exemple). Pour cela, en suivant les dires de la documentation, il suffit d’override la view class ObtainAuthToken.

Allons y, Créons notre view pour l’authentification !

from requests import Response
from rest_framework import status
from rest_framework.authtoken.models import Token
from rest_framework.authtoken.views import ObtainAuthToken
 
 
class CompleteObtainAuthToken(ObtainAuthToken):
 
    def post(self, request):
        serializer = self.serializer_class(data=request.DATA)
        if serializer.is_valid():
            u = serializer.object['user']
            token, created = Token.objects.get_or_create(user=u)
            return Response({
                'token': token.key,
                'user_id': u.id
                })
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
 
 
obtain_auth_token = CompleteObtainAuthToken.as_view()

Et changeons l’url par cette nouvelle vue que nous avons créé

urlpatterns += patterns('',
    url(r'^api-token-auth/', 'my_project.views.obtain_auth_token')
)

Et maintenant notre url d’authentification à l’API retourne bien l’id de l’utilisateur en plus :

$ curl -X POST http://127.0.0.1:8000/api-token-auth/ -d 'username=mon@mail.com&password=1234'
{"token": "e4dcf12d52f04f654e85e7f409ae524f58b9a7g7", "user_id": 24}

Aymeric DERBOIS

J'ai 27 ans et je suis développeur. Je travail la plupart du temps sur des techno web, mais pas que. Étant à l'affût des nouveautés, j'adore découvrir tout et n'importe quoi dans l'informatique. Je suis amoureux de CakePHP et j'utilise au quotidien Django. Je suis très ouvert d'esprit :). J'aime bien utiliser AngularJS aussi de temps à autre pour faire du front. Au quotidien j'utilise Fedora/Ubuntu pour le desktop et CentOS pour mes serveurs. Par ailleurs je maîtrise le C/C++/Python/PHP/...

More Posts - Website

Follow Me:
Twitter

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.