प्रमाणीकरण
te प्रमाणीकरण और अनुमतियों को संभालने के लिए एक सरल लेकिन शक्तिशाली इंटरफ़ेस प्रदान करता है। एक बार जब आप उपयुक्त प्रमाणीकरण बैकएंड स्थापित कर लेते हैं AuthenticationMiddleware , request.user और request.auth इंटरफ़ेस आपके समापन बिंदु में उपलब्ध होगा।
te.से आयात
से te.ation आयात (
AuthCreditials, AuthenticationBackend प्रमाणीकरण, Se
)
te.leसे मिडलवेयर आयात
te.le.प्रमाणीकरण आयात AuthenticationMiddleware
से te.आयात T
स्टारलेट से। रूटिंग आयात मार्ग
आयात आधार 64
आयात करें
कक्षा मूल (AuthenticationBackend):
Ac def प्रमाणित करें (self, conn):
यदि "प्राधिकरण" con.ers में नहीं है:
वापसी
Auth = .ers ["प्राधिकरण"]
कोशिश:
योजना, क्रेडेंशियल्स = .()
अगर स्कीम। लोअर ()! = 'बुनियादी':
वापसी
डिकोड = बेस 64.b64डिकोड (क्रेडेंशियल्स).डिकोड ("ascii")
सिवाय (ValueEror, UnicodeEror, binascii. Eror) exc के रूप में:
प्रमाणीकरण त्रुटि उठाएँ ('अमान्य मूल प्रामाणिक क्रेडेंशियल्स')
उपयोगकर्ता नाम, _, पासवर्ड = डिकोडेड। विभाजन (":")
#TODO: आप यहां उपयोगकर्ता नाम और पासवर्ड सत्यापित करना चाहते हैं।
ऑथक्रेडेंशियल्स लौटें (["प्रमाणित"]), Se(username)
Ac def मुखपृष्ठ (अनुरोध):
यदि अनुरोध.उपयोगकर्ता _ प्रमाणित है:
वापसी T('हैलो,' + अनुरोध.user. display_name)
प्लेनटेक्सटरिस्पॉन्स लौटें ('Hello, you')
मार्ग = [
मार्ग ("/", समापन बिंदु = मुखपृष्ठ)
]
मिडलवेयर = [
मिडलवेयर AuthenticationMiddleware backend=BasicAuthBackend ())
]
ऐप = स्टारलेट (मार्ग = मार्ग, middleware=middleware
उपयोगकर्ता
एक बार AuthenticationMiddleware स्थापना पूरी हो गई है। request.user इंटरफेस एंडपॉइंट या अन्य मिडलवेयर के लिए उपलब्ध होंगे।
यह इंटरफ़ेस विरासत में मिलना चाहिए BaseUser यह उपवर्ग दो विशेषताओं के साथ-साथ आपके उपयोगकर्ता नमूना में निहित कोई अन्य जानकारी प्रदान करता है।
.is_authenticated.display_name
te दो अंतर्निहित उपयोगकर्ता कार्यान्वयन प्रदान करता है: UnauthenticatedUser() , और SimpleUser(username) ...
प्रमाणीकरण क्रेडेंशियल्स
महत्वपूर्ण रूप से, प्रमाणीकरण क्रेडेंशियल्स को उपयोगकर्ताओं से एक अलग अवधारणा के रूप में माना जाना चाहिए। प्रमाणीकरण योजनाओं को उपयोगकर्ता पहचान से स्वतंत्र रूप से विशिष्ट अनुमतियों को प्रतिबंधित या अनुदान देने में सक्षम होना चाहिए।
AuthCredentials वर्ग request.auth द्वारा उजागर मूल इंटरफ़ेस प्रदान करता है:
.scopes
अनुमति
आवश्यक प्रमाणीकरण गुंजाइश को शामिल करने के लिए आने वाले अनुरोधों को मजबूर करने के लिए समापन बिंदु सज्जाकार के रूप में अनुमतियों को लागू किया जाता है।
से te.ation आयात की आवश्यकता है
@ आवश्यकता ('प्रमाणित')
Ac def डैशबोर्ड (अनुरोध):
...
आप आवश्यक श्रेणियों में से एक या अधिक को शामिल कर सकते हैं:
से te.ation आयात की आवश्यकता है
@ आवश्यकता (['प्रमाणित', 'व्यवस्थापक'])
Ac def डैशबोर्ड (अनुरोध):
...
डिफ़ॉल्ट रूप से, कोई अनुमति नहीं दिए जाने पर 403 प्रतिक्रिया वापस आ जाती है। कुछ मामलों में, आप इसे अनुकूलित करना चाह सकते हैं, जैसे कि अनधिकृत उपयोगकर्ताओं से लेआउट के बारे में जानकारी छिपाना।
से te.ation आयात की आवश्यकता है
@ आवश्यकता (['प्रमाणित', 'व्यवस्थापक'], स्थिति_कोड = 404)
Ac def डैशबोर्ड (अनुरोध):
...
!!! ध्यान दें कि समर्थित नहीं हैं status_code पैरामीटर। इन मामलों के लिए, एक 403 (Forbidn) स्थिति कोड हमेशा उपयोग किया जाएगा।
या आप किसी अन्य पृष्ठ पर अनधिकृत उपयोगकर्ताओं को पुनर्निर्देशित करना चाह सकते हैं।
से te.ation आयात की आवश्यकता है
Ac def मुखपृष्ठ (अनुरोध):
...
@ आवश्यकता ('प्रमाणित', पुनर्निर्देशित = 'मुखपृष्ठ')
Ac def डैशबोर्ड (अनुरोध):
...
उपयोगकर्ताओं को पुनर्निर्देशित करते समय, जिस पृष्ठ पर आप उन्हें पुनर्निर्देशित करते हैं, उसमें मूल रूप सेnext क्वेरी मापदंडों में अनुरोध किया गया शामिल है:
से te.ation आयात की आवश्यकता है
rette.से आयात किया गया
@ की आवश्यकता है ('प्रमाणित', पुनर्निर्देशित = 'लॉगिन')
Ac def व्यवस्थापक (अनुरोध):
...
Ac def लॉगिन (अनुरोध):
यदि अनुरोध.विधि == "POST":
# अब जब उपयोगकर्ता प्रमाणित है,
# हम उन्हें उनके मूल अनुरोध गंतव्य पर भेज सकते हैं
यदि अनुरोध.उपयोगकर्ता _ प्रमाणित है:
next_url = request.query_params मिलता है ("next")
यदि अगला _ url:
वापसी पुनर्निर्देशन (next_url)
वापसी पुनर्निर्देशन ("/")
कक्षा-आधारित समापन बिंदुओं के लिए, आपको कक्षा के तरीकों के आसपास डेकोरेटर लपेटना चाहिए।
से te.ation आयात की आवश्यकता है
te.endसे HTTPEndआयात करें
क्लास डैशबोर्ड (HTTPEndpoint):
@ आवश्यकता ("प्रमाणित")
nc def मिलता है (self, request):
...
कस्टम प्रमाणीकरण त्रुटि प्रतिक्रिया
प्रमाणीकरण बैकएंड ट्रिगर होने पर आप अनुकूलित कर सकते हैं AuthenticationError त्रुटि प्रतिक्रिया भेजी गई जब:
te.से आयात
te.leसे मिडलवेयर आयात
te.le.प्रमाणीकरण आयात AuthenticationMiddleware
स्टारलेट से। अनुरोध आयात अनुरोध
से te.आयात JSONआयात
Don _ auth _ त्रुटि (अनुरोध: अनुरोध, exc: अपवाद):
JSONरिटर्न ({"error": str(exc)}, status_code = 401)
ऐप = स्टारलेट (
मिडलवेयर = [
मिडलवेयर AuthenticationMiddleware backend=BasicAuthBackend (), on _ त्रुटि = on _ auth _ error),
],
)