2014-12-19 15 views
7

Vorrei revocare il token precedente ogni volta che un utente effettua l'accesso. Ciò significherebbe generare un nuovo token (o almeno modificare la chiave dell'entità del modello esistente). Sembra tutto molto semplice, ma nei documenti DRF, non vedo alcuna menzione di questo scenario. I documenti sembrano assumere che il token rimanga sempre lo stesso. È solo un caso, o mi manchi qualcosa? La mia domanda è: C'è qualcosa di sbagliato nel cambiare il token ogni volta che un utente accede?Cambia token per TokenAuthentication ogni volta che l'utente esegue il login

risposta

12

Il TokenAuthentication fornito da Django REST Framework è destinato a essere utilizzato per casi semplici in cui il token non ha mai bisogno di cambiare e vi è un solo token per un utente.

I documenti sembrano presupporre che il token rimane sempre lo stesso.

Questo è corretto. Qualsiasi cosa extra deve essere implementata in modo indipendente.

mi piacerebbe di revocare la prima pedina ogni volta che un utente accede a.

È possibile farlo nella vista di autenticazione, eliminando eventuali gettoni per l'utente che ha effettuato l'accesso.

Se si utilizzano le viste fornite per l'autenticazione del token, sarà necessario ottenere subclass them per ottenere sempre un nuovo token per l'utente.

class ObtainAuthToken(APIView): 
    throttle_classes =() 
    permission_classes =() 
    parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,) 
    renderer_classes = (renderers.JSONRenderer,) 

    def post(self, request): 
     serializer = AuthTokenSerializer(data=request.data) 
     serializer.is_valid(raise_exception=True) 
     user = serializer.validated_data['user'] 

     Token.objects.filter(user=the_user).delete() 
     token, created = Token.objects.create(user=user) 

     return Response({'token': token.key}) 

Ciò invalida sempre la chiave precedente e genera una nuova chiave.

+0

Grazie mille @ kevin-brown. Risposta grande, chiara e completa. – jacob

Problemi correlati