डीआरएफ में कस्टम प्रमाणीकरण योजना कैसे कार्यान्वित करें?
कस्टम प्रमाणीकरण योजना को लागू करने के लिए, हमें डीआरएफ की BaseAuthentication
कक्षा को उप-वर्गीकृत करने और .authenticate(self, request)
विधि को ओवरराइड करने की आवश्यकता है।
यदि प्रमाणीकरण सफल होता है, या None
अन्यथा (user, auth)
के दो-टुपल को विधि को वापस करना चाहिए। कुछ परिस्थितियों में, हम .authenticate()
विधि से AuthenticationFailed
अपवाद बढ़ा सकते हैं।
(DRF docs से) उदाहरण:
चलें कहते हैं कि हम एक कस्टम अनुरोध 'X_USERNAME'
नामित शीर्षक में username
द्वारा दिए गए उपयोगकर्ता के रूप में किसी भी भेजे अनुरोध प्रमाणित करने के लिए चाहते हैं।
चरण 1: कस्टम प्रमाणीकरण वर्ग
कि ऐसा करने के लिए, हम my_app
में एक authentication.py
फ़ाइल पैदा करेगा बनाएँ।
# my_app/authentication.py
from django.contrib.auth.models import User
from rest_framework import authentication
from rest_framework import exceptions
class ExampleAuthentication(authentication.BaseAuthentication):
def authenticate(self, request):
username = request.META.get('X_USERNAME') # get the username request header
if not username: # no username passed in request headers
return None # authentication did not succeed
try:
user = User.objects.get(username=username) # get the user
except User.DoesNotExist:
raise exceptions.AuthenticationFailed('No such user') # raise exception if user does not exist
return (user, None) # authentication successful
चरण 2: कस्टम प्रमाणीकरण वर्ग
निर्दिष्ट करें कस्टम प्रमाणीकरण वर्ग बनाने के बाद, हम अपने डीआरएफ सेटिंग में इस प्रमाणीकरण वर्ग को परिभाषित करने की जरूरत है। ऐसा करने से, सभी प्रमाणीकरण इस प्रमाणीकरण योजना के आधार पर प्रमाणित किए जाएंगे।
'DEFAULT_AUTHENTICATION_CLASSES': (
'my_app.authentication.ExampleAuthentication', # custom authentication class
...
),
नोट: आप पर-व्यू के आधार पर या प्रति-viewset आधार और वैश्विक स्तर पर इस कस्टम प्रमाणीकरण वर्ग उपयोग करना चाहते हैं, तो आप इस प्रमाणीकरण वर्ग स्पष्ट रूप से अपने विचारों में परिभाषित कर सकते हैं।
class MyView(APIView):
authentication_classes = (ExampleAuthentication,) # specify this authentication class in your view
...
आप कैसे इस कर्ल का उपयोग कर का उपयोग करने पर एक उदाहरण देना कृपया कर सकते हैं? – momokjaaaaa
@momokjaaaaa एक पोस्ट अनुरोध में शीर्षलेख भेजने के लिए इस SO लिंक को जांचें। http://stackoverflow.com/questions/356705/how-to-send-a-header-using-a-http-request-through-a-curl-call –