13

मैंने django rest framework Docs के अनुसार टोकन प्रमाणीकरण लागू किया है।django rest framework - टोकन प्रमाणीकरण लॉगआउट

पर्चा मैं क्या पढ़ा, डीआरएफ के टोकन प्रमाणीकरण काफी सरल है - प्रति उपयोगकर्ता एक टोकन, टोकन समाप्त न हो और हमेशा उपयोग के लिए मान्य है (मैं सही हूँ?)।

मैं समझता हूं कि वहाँ बेहतर प्रथाएं हैं, लेकिन अब के लिए डीआरएफ टोकन प्रमाणीकरण मेरे लिए ठीक है।

है- मेरे सवाल का सामान्य डीआरएफ टोकन प्रमाणीकरण के साथ लॉगआउट के लिए सबसे अच्छा अभ्यास क्या है?

मेरा मतलब है, जब उपयोगकर्ता लॉग आउट करता है, तो क्या मुझे क्लाइंट पक्ष से टोकन हटा देना चाहिए? और फिर लॉगिन टोकन फिर से प्राप्त करें? क्या मुझे टोकन हटा देना चाहिए और एक नया उत्पन्न करना चाहिए?

इस के साथ अनुभव वाला कोई भी व्यक्ति?

+0

संभव डुप्लिकेट [बाकी ढांचे django - समझ प्रमाणीकरण और में प्रवेश ] (http://stackoverflow.com/questions/30546258/django-rest-framework-understanding- प्रमाणीकरण-and-logging-in) –

उत्तर

4

टोकन प्रमाणीकरण के पूरे विचार:

प्रमाणीकरण सेवाओं में आम तौर पर

, वहाँ एक जीवन भर के एक टोकन के साथ जुड़े है। एक विशिष्ट समय के बाद, टोकन समाप्त हो जाएगा। यहां, हमें एक एक्सेस टोकन मिलता है जिसमें सर्वर द्वारा इसके साथ एक समाप्ति समय भेजा जाता है। अब क्लाइंट को अनुरोध हेडर में हर बार इस टोकन को भेजने की आवश्यकता है ताकि सर्वर पहचान सके कि उपयोगकर्ता कौन है। या तो हम इसे समाप्त होने पर ट्रैक रख सकते हैं या हम इसे तब तक उपयोग कर सकते हैं जब तक हमें INVALID_TOKEN त्रुटि प्राप्त न हो जाए। उस स्थिति में हमें फिर से सर्वर से टोकन प्राप्त करना होगा।

access_token का जीवनकाल उस उपयोगकर्ता के लॉगिन सत्र से स्वतंत्र है जो किसी ग्राहक तक पहुंच प्रदान करता है। OAuth2, कहें, उपयोगकर्ता लॉगिन या लॉगआउट, या एक सत्र की कोई अवधारणा नहीं है। टोकन का उपयोग उपयोगकर्ता की पहचान करने के लिए किया जाता है यदि वह वह कहता है जो वह कहता है।

टोकन उपयोगकर्ता और ग्राहक के लिए अद्वितीय है। आप मुझे याद रखने की तरह कुछ सक्षम करने के लिए कुकीज़ पर सहेज सकते हैं लेकिन सर्वर पर आपको इसे हटाने की आवश्यकता नहीं है। जब भी टोकन समाप्त हो जाता है, क्लाइंट को फिर से टोकन प्राप्त करने के लिए सर्वर से अनुरोध भेजने की आवश्यकता होती है।

डीआरएफ टोकन Authetication में टोकन समाप्ति:

वर्तमान में, डीआरएफ टोकन प्रमाणीकरण इस कार्यक्षमता का समर्थन नहीं करता है। आपको इसे स्वयं लागू करना होगा या किसी तृतीय पक्ष पैकेज का उपयोग करना होगा जो इस कार्यक्षमता को प्रदान करता है। टोकन की समाप्ति की जांच करनी चाहिए और टोकन की समयसीमा समाप्त होने पर अपवाद बढ़ाया जाना चाहिए।

इसे स्वयं लागू करने के लिए, आप डीआरएफ टोकन प्रमाणीकरण वर्ग से उपclass कर सकते हैं और अपना तर्क जोड़ सकते हैं।
आप किसी तीसरे पक्ष के पैकेज का भी उपयोग कर सकते हैं django-rest-framework-expiring-tokens

कुछ संदर्भ:
1. Token Authentication for RESTful API: should the token be periodically changed?
2. How to Logout of an Application Where I Used OAuth2 To Login With Google?

+0

आपके उत्तर के लिए धन्यवाद। जो मैंने पढ़ा है, डीआरएफ में टोकन कभी समाप्त नहीं होता है, क्या मैं सही हूँ? –

+0

हां, मुझे लगता है कि वर्तमान में डीआरएफ टोकन प्रमाणीकरण में टोकन समाप्ति की कोई कार्यक्षमता नहीं है। टोकन समाप्ति के लिए आपको अपना तर्क लागू करने की आवश्यकता है। –

+0

शायद यह मदद कर सकता है। https://github.com/JamesRitchie/django-rest-framework-expiring-tokens –

1

यह SessionAuthentication की तरह लगता है क्या तुम सच में देख रहे है।आप BasicAuthentication या TokenAuthentication के माध्यम से एक सत्र प्रारंभ (लॉगिन) कर सकते हैं। फिर शेष एपीआई कॉल के लिए सत्रक को अपने "टोकन" के रूप में उपयोग करें। जब आप लॉगआउट या कुछ समय से अधिक हो जाते हैं तो "टोकन" समाप्त हो जाता है।

यदि आप सत्र प्रमाणीकरण का उपयोग कर csrftoken समस्या में भागते हैं, तो this बहुत उपयोगी हो सकता है।

11

यहाँ एक सरल विचार है कि मैं लॉग आउट करने का उपयोग कर रहा है: के लिए इसे जोड़ने

from django.contrib.auth.models import User 
from rest_framework import status 
from rest_framework.response import Response 
from rest_framework.views import APIView 

class Logout(APIView): 
    queryset = User.objects.all() 

    def get(self, request, format=None): 
     # simply delete the token to force a login 
     request.user.auth_token.delete() 
     return Response(status=status.HTTP_200_OK) 

फिर अपने urls.py:

urlpatterns = [ 
    ... 
    url(r'^logout/', Logout.as_view()), 
] 
की
+0

अच्छा !!! धन्यवाद! –

+2

क्षमा करें, लेकिन 'queryset' के लिए क्या उपयोग किया जाता है? – dangsonbk