使用dj-rest-auth+django-allauth获取Salesforce登录时出现问题



我的应用程序有一个Django 3.1后端,带有Django-allauth和dj-rest-auth(Django-rest-auth的主动支持分支(。

我的手机和网络前端已经可以通过REST使用Facebook和谷歌登录了。我现在正试图添加Salesforce作为第三种REST社交登录方法,但遇到了问题。

我已经遵循了Salesforce:的django-allauth说明

  • 创建了一个带有id和openid作用域(以及其他一些作用域(的Salesforce Connected应用程序,并将回调URL设置为https://www.mywebdomain.com/accounts/salesforce/login/callback/
  • 在Django中创建了一个SocialApplication,在";键";字段(https://login.salesforce.com/)
  • 包括INSTALLED_APPS中的allauth.socialaccount.providers.salesforce

我一直在使用客户端JSforce在前端启动Salesforce auth请求,但如果其他方法更简单/更好,我对它们持开放态度。

在我客户的JS代码中运行jsforce.browser.login()会打开Salesforce登录弹出窗口。在输入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.codeauth_error.exception都为空。

我还尝试将access_token从该URL的散列发送到我的Salesforce API端点(见下文(,但这导致了400错误("值不正确"(。

以下是我如何在views.py中定义我的SocialLoginView,基于dj-rest-auth的社交身份验证文档:

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

我的网址.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社交身份验证在此应用程序中工作?

我发现了它并使其工作:当发布到我的dj-rest-auth Salesforce API端点时,我只在我的POST主体中包含了access_token。我实际上需要access_tokenkey,其中key是Salesforce登录URL("https://login.salesforce.com"(。

这确实在Salesforce的django-allauth说明中,但我误解了措辞。我现在知道它说需要POST主体中的access_tokenkey

最新更新