Dj-rest-prote + django-allauth के साथ काम करने में सेल्सफोर्स लॉगिन प्राप्त करने में परेशानी

Dec 03 2020

मेरे ऐप में Django 3.1 बैकेंड है जिसमें django-allauth और dj-rest- Cort (सक्रिय रूप से समर्थित django-rest-Cort ) का समर्थन है।

मेरे मोबाइल और वेब फ्रंट पहले से ही Facebook और Google का उपयोग REST के माध्यम से कर सकते हैं। मैं अब Salesforce को 3rd REST सोशल लॉगिन विधि के रूप में जोड़ने की कोशिश कर रहा हूं, लेकिन मुद्दों में चल रहा हूं।

मैंने सेल्सफोर्स के लिए django-allauth निर्देशों का पालन किया है :

  • आईडी और ओपनिड स्कोप (कुछ अन्य के साथ) के साथ एक सेल्सफोर्स कनेक्टेड ऐप बनाया, और कॉलबैक URL को सेट किया https://www.mywebdomain.com/accounts/salesforce/login/callback/
  • "की" फ़ील्ड में ग्राहक आईडी, गुप्त और लॉगिन URL के साथ Django में एक सामाजिक निर्माण बनाया गया है (https://login.salesforce.com/)
  • INSTALLED_APPS में allauth.socialaccount.providers.salesforce शामिल करें

मैं ग्राहक-पक्ष JSforce का उपयोग करके फ़्रंटेंड में Salesforce ऑस्ट्रियाई अनुरोध को बंद करने के लिए उपयोग कर रहा हूं, लेकिन अगर वे सरल / बेहतर / आदि हैं तो मैं अन्य तरीकों के लिए खुला हूं।

jsforce.browser.login()मेरे ग्राहकों के जेएस कोड में चलने से सेल्सफोर्स लॉगिन पॉपअप खुल जाता है। Salesforce लॉगिन क्रेडेंशियल दर्ज करने के बाद, Salesforce सिस्टम मेरे परिभाषित कॉलबैक URL पर पुनर्निर्देशित हो जाता है, जिसके परिणामस्वरूप एक पृष्ठ होता है जो निम्नलिखित जानकारी दिखाता है:

सामाजिक नेटवर्क लॉगिन विफलता
आपके सामाजिक नेटवर्क खाते के माध्यम से लॉगिन करने का प्रयास करते समय एक त्रुटि हुई।

उस पृष्ठ पर पता बार में URL कुछ इस तरह दिखता है:

https://www.mywebdomain.com/accounts/salesforce/login/callback/#access_token=00D3t000004QWRm%21ARwAQPfHWiM6jdB43dlyW6qjEw._34mjzGi_Jv6YCXp0QssT.9F9lCge5_YaH8gqTy3Od6SywCs8X9zOGv145SyviBVeGdn0&instance_url=https%3A%2F%2Fna123.salesforce.com&id=https%3A%2F%2Flogin.salesforce.com%2Fid%2F00D3t000004QWRmEAO%2F0053t000008QBetAAG&issued_at=1606802917608&signature=KvxAX0WBCFQYY%2BO25id9%2FXxpbh2q2d2vWdQ%2FFV5FCBw%3D&state=jsforce0.popup.c0ockgct29g&scope=id+api+web+refresh_token+openid&token_type=Bearer

मैं डिबग करने की कोशिश की और मेरी बैकएंड में त्रुटि प्रिंट, लेकिन दोनों auth_error.codeऔर auth_error.exceptionखाली / खाली थे।

मैंने access_tokenउस URL के हैश से अपने Salesforce API समापन बिंदु (नीचे देखें) को भेजने का भी प्रयास किया , लेकिन इसका परिणाम 400 त्रुटि ("गलत मान") हुआ।

यहाँ बताया गया है कि मैंने SocialLoginViewअपने विचारों को डी -बाकी-सोशल ऑर्क्युअल डॉक्यूमेंटेशन के आधार पर अपने विचारों में कैसे परिभाषित किया है :

from dj_rest_auth.registration.views import SocialLoginView
from allauth.socialaccount.providers.facebook.views import FacebookOAuth2Adapter
from allauth.socialaccount.providers.google.views import GoogleOAuth2Adapter
from allauth.socialaccount.providers.salesforce.views import SalesforceOAuth2Adapter


class FacebookLogin(SocialLoginView):
    adapter_class = FacebookOAuth2Adapter


class GoogleLogin(SocialLoginView):
    adapter_class = GoogleOAuth2Adapter


class SalesforceLogin(SocialLoginView):
    adapter_class = SalesforceOAuth2Adapter

मेरा urls.py:

from .views import FacebookLogin, GoogleLogin, SalesforceLogin

urlpatterns = [
    ...
    # Sending access_token to the Facebook and Google REST endpoints works,
    # but doing the same for the Salesforce REST endpoint does not (400 error: "Incorrect value")
    url(r'^api/rest-auth/facebook/$', FacebookLogin.as_view(), name='fb_login'), url(r'^api/rest-auth/google/$', GoogleLogin.as_view(), name='google_login'),
    url(r'^api/rest-auth/salesforce/$', SalesforceLogin.as_view(), name='salesforce_login'),
    ...
]

इस ऐप में काम करने के लिए Salesforce सोशल ऑर्ट को कैसे बनाया जा सकता है?

जवाब

sunw Jan 27 2021 at 23:40

मैंने इसका पता लगा लिया और इसे काम में ले लिया: जब मेरे डीजे-बाकी-सेल्स सेल्स एपीआई एपीआई समापन बिंदु पर access_tokenपोस्ट कर रहा था, तो मैं केवल अपने POST बॉडी में शामिल था । मुझे वास्तव में दोनों की आवश्यकता है access_tokenऔर key, keySalesforce लॉगिन URL ( "https://login.salesforce.com") कहां है ।

यह वास्तव में सेल्सफोर्स के लिए django-allauth निर्देशों में था , लेकिन मैंने शब्दांकन की गलत व्याख्या की। मैं अब पता है कि यह दोनों की आवश्यकता के लिए कहते हैं access_tokenऔर keyपोस्ट शरीर में।