2014-12-19 11 views
7

में लॉग इन करता है, जब भी उपयोगकर्ता लॉग इन करता है तो मैं प्रत्येक टोकन को निरस्त करना चाहता हूं। इसका मतलब है कि एक नया टोकन उत्पन्न करना (या कम से कम मौजूदा मॉडल इकाई की कुंजी बदलना)। यह सब सीधा लगता है, लेकिन डीआरएफ दस्तावेज़ों में, मुझे उस परिदृश्य का कोई उल्लेख नहीं दिखता है। दस्तावेज़ों को लगता है कि टोकन हमेशा रहता है। क्या यह सिर्फ एक साधारण मामला है, या क्या मुझे कुछ याद आ रहा है? मेरा सवाल है: क्या उपयोगकर्ता द्वारा लॉग इन किए जाने पर टोकन को बदलने में कुछ गड़बड़ है?टोकन प्रमाणीकरण के लिए टोकन बदलें प्रत्येक बार उपयोगकर्ता

उत्तर

12

Django REST Framework द्वारा प्रदत्त TokenAuthentication का उपयोग उन साधारण मामलों के लिए किया जाना चाहिए जहां टोकन को कभी भी बदलने की आवश्यकता नहीं है, और उपयोगकर्ता के लिए केवल एक टोकन है।

दस्तावेज़ों को लगता है कि टोकन हमेशा वही रहता है।

यह सही है। अतिरिक्त कुछ भी स्वतंत्र रूप से लागू किया जाना है।

मैं पहले टोकन में हर बार रद्द करने के लिए किसी उपयोगकर्ता के लॉग चाहते हैं।

आप उपयोगकर्ता जो में लॉग ऑन है के लिए किसी भी टोकन को हटाने के द्वारा प्रमाणीकरण ध्यान में रखते हुए ऐसा कर सकते हैं।

from rest_framework.authtoken.models import Token 

Token.objects.filter(user=the_user).delete() 

यदि आप टोकन प्रमाणीकरण के लिए प्रदान किए गए विचारों का उपयोग कर रहे हैं, तो आपको उपयोगकर्ता के लिए हमेशा एक नया टोकन प्राप्त करने के लिए subclass them की आवश्यकता होगी।

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}) 

यह हमेशा पिछली कुंजी को अमान्य कर देगा और एक नई कुंजी उत्पन्न करेगा।

+0

बहुत बहुत धन्यवाद @ केविन-ब्राउन। महान, स्पष्ट, और पूरी तरह से जवाब। – jacob

संबंधित मुद्दे