फ़ेसबुक का इस्तेमाल करते समय फ़ेसबुक सलाह देता हैलॉगिन आपको शुरू में उपयोगकर्ता से यथासंभव कुछ अनुमतियों के लिए पूछना चाहिए, और विशेष रूप से प्रकाशन अनुमतियों का अनुरोध करने से बचें, जब तक कि उपयोगकर्ता को आपकी साइट पर कुछ प्रकाशित करने की आवश्यकता न हो - https://developers.facebook.com/docs/facebook-login/permissions/#optimizing.
हम इसका उपयोग करके इसे लागू करने का प्रयास कर रहे हैंपायथन-सोशल-ओरिजनल django ऐप, लेकिन ऐसा लगता है कि साइट में विभिन्न बिंदुओं पर अलग-अलग अनुमतियों के लिए पूछने का कोई तरीका नहीं है - गुंजाइश के माध्यम से सेट किया गया है SOCIAL_AUTH_FACEBOOK_SCOPE
सेटिंग, और बाद में एक अलग दायरे के लिए पूछना संभव नहीं है (उदाहरण के लिए छोड़कर publish_actions
से SOCIAL_AUTH_FACEBOOK_SCOPE
, और तब उपयोगकर्ता से उस अनुमति को प्रदान करने के लिए कह रहा है जब वे आपकी साइट से फेसबुक पर पोस्ट करने की कोशिश करते हैं)।
क्या किसी को पता है कि यह अजगर-सामाजिक-सामाजिक ऐप में संभव है, और यदि ऐसा है, तो कैसे?
उत्तर:
उत्तर № 1 के लिए 4(निम्नलिखित पाठ डॉक्स से निकाला गया था http://psa.matiasaguirre.net/docs/use_cases.html#multiple-scopes-per-provider)
फिलहाल पायथन-सोशल-ऑर्गेनिक doesn "t प्रदान करते हैंएकल बैकएंड के लिए कई स्कोप को परिभाषित करने के लिए एक विधि है, यह आमतौर पर वांछित है क्योंकि यह उपयोगकर्ता को न्यूनतम गुंजाइश के लिए पूछने और जब यह वास्तव में आवश्यक हो तो पहुंच बढ़ाने की सिफारिश की है। यह उस व्यवहार को पूरा करने के लिए मूल एक का विस्तार करने वाले एक नए बैकएंड को जोड़ना संभव है, इसे करने के दो तरीके हैं।
अधिभावी get_scope()
तरीका
from social.backends.facebook import FacebookOAuth2
class CustomFacebookOAuth2(FacebookOauth2):
def get_scope(self):
scope = super(CustomFacebookOAuth2, self).get_scope()
if self.data.get("extrascope"):
scope += [("foo", "bar")]
return scope
यह विधि काफी सरल है, यह उस पद्धति को ओवरराइड करता है जो बैकएंड में गुंजाइश मान लौटाता है (get_scope()
) और अतिरिक्त मानों को जोड़ता है यदि वह सूचीबद्ध करता है यदि यह एक पैरामीटर द्वारा इंगित किया गया था GET
या POST
डेटा (self.data
)।
अपने प्रोजेक्ट में इस नए बैकेंड को किसी जगह पर रखें और मूल को बदल दें FacebookOAuth2
में AUTHENTICATION_BACKENDS
इस नए संस्करण के साथ।
दायरे को संभालने के लिए बैकएंड को परिभाषित करना
यह एक दूसरे को परिभाषित करके भी ऐसा करना संभव हैबैकएंड जो मूल से विस्तृत है, लेकिन नाम को ओवरराइड करता है, यह नए URL और नई बैकेंड के लिए नई सेटिंग्स को लागू करेगा (चूंकि नाम का उपयोग सेटिंग्स नाम बनाने के लिए किया जाता है), यह सभी प्रदाताओं के बाद से प्रदाता में एक नया आवेदन भी देता है। आपको कई रीडायरेक्ट URL को परिभाषित करने का विकल्प देता है। ऐसा करने के लिए बस एक बैकएंड जोड़ें:
from social.backends.facebook import FacebookOAuth2
class CustomFacebookOAuth2(FacebookOauth2):
name = "facebook-custom"
अपने प्रोजेक्ट में मूल स्थान रखते हुए इस नए बैकेंड को किसी स्थान पर रखें FacebookOAuth2
में AUTHENTICATION_BACKENDS
। अब URL का एक नया सेट कार्यशील होगा:
/login/facebook-custom
/complete/facebook-custom
/disconnect/facebook-custom
और सेटिंग्स का एक नया सेट भी:
SOCIAL_AUTH_FACEBOOK_CUSTOM_KEY = "..."
SOCIAL_AUTH_FACEBOOK_CUSTOM_SECRET = "..."
SOCIAL_AUTH_FACEBOOK_CUSTOM_SCOPE = [...]
जब अतिरिक्त अनुमतियों की आवश्यकता होती है, तो उपयोगकर्ता को पुनर्निर्देशित करें /login/facebook-custom
और फिर इस नए बैकएंड के लिए सोशल ऑर्टिक एंट्री लें user.social_auth.get(provider="facebook-custom")
और उपयोग करें access_token
इस में।