/ / मैं अलग-अलग समय में फेसबुक से अलग-अलग अनुमति कैसे मांग सकता हूं? - django, facebook, python-social-Andor

मैं विभिंन समयों पर facebook से विभिंन अनुमतियों के लिए कैसे पूछ सकता हूं?-django, फेसबुक, अजगर-सामाजिक-auth

फ़ेसबुक का इस्तेमाल करते समय फ़ेसबुक सलाह देता हैलॉगिन आपको शुरू में उपयोगकर्ता से यथासंभव कुछ अनुमतियों के लिए पूछना चाहिए, और विशेष रूप से प्रकाशन अनुमतियों का अनुरोध करने से बचें, जब तक कि उपयोगकर्ता को आपकी साइट पर कुछ प्रकाशित करने की आवश्यकता न हो - 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 इस में।