无法使用 dj-rest-auth + django-allauth 登录 Salesforce
Trouble getting Salesforce login working with dj-rest-auth + django-allauth
我的应用有一个 Django 3.1 后端 django-allauth and dj-rest-auth (actively supported fork of django-rest-auth).
我的移动和网络前端已经可以使用 Facebook 和 Google 通过 REST 登录。我现在正尝试将 Salesforce 添加为第三种 REST 社交登录方法,但 运行 遇到了问题。
我关注了 django-allauth instructions for Salesforce:
- 创建了一个具有 id 和 openid 范围(以及其他一些范围)的 Salesforce Connected App,并将回调 URL 设置为
https://www.mywebdomain.com/accounts/salesforce/login/callback/
- 在 Django 中创建了一个 SocialApplication,在“密钥”字段中包含客户端 ID、密码和登录名 URL (https://login.salesforce.com/)
- allauth.socialaccount.providers.salesforce 包含在 INSTALLED_APPS
中
我一直在使用客户端 JSforce 在前端启动 Salesforce 身份验证请求,但我愿意接受其他方法 simpler/better/etc。
运行 jsforce.browser.login()
在我客户的 JS 代码中打开 Salesforce 登录弹出窗口。输入 Salesforce 登录凭据后,Salesforce 系统重定向到我定义的回调 URL,导致页面显示以下文本:
Social Network Login Failure
An error occurred while attempting to login via your social network account.
该页面地址栏中的 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
都是 blank/empty。
我还尝试将 access_token
从 URL 的哈希发送到我的 Salesforce API 端点(见下文),但这导致了 400 错误(“不正确的值").
这是我在 views.py 中定义 SocialLoginView
的方式,基于 dj-rest-auth's social auth documentation:
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 社交身份验证在此应用程序中起作用?
我想通了并让它工作:当发布到我的 dj-rest-auth Salesforce API 端点时,我只在我的 POST 正文中包含 access_token
。我实际上需要 access_token
和 key
,其中 key
是 Salesforce 登录 URL ("https://login.salesforce.com"
).
确实在 django-allauth instructions for Salesforce 中,但我误解了措辞。我现在知道它说在 POST 正文中需要 access_token
和 key
。
我的应用有一个 Django 3.1 后端 django-allauth and dj-rest-auth (actively supported fork of django-rest-auth).
我的移动和网络前端已经可以使用 Facebook 和 Google 通过 REST 登录。我现在正尝试将 Salesforce 添加为第三种 REST 社交登录方法,但 运行 遇到了问题。
我关注了 django-allauth instructions for Salesforce:
- 创建了一个具有 id 和 openid 范围(以及其他一些范围)的 Salesforce Connected App,并将回调 URL 设置为
https://www.mywebdomain.com/accounts/salesforce/login/callback/
- 在 Django 中创建了一个 SocialApplication,在“密钥”字段中包含客户端 ID、密码和登录名 URL (https://login.salesforce.com/)
- allauth.socialaccount.providers.salesforce 包含在 INSTALLED_APPS 中
我一直在使用客户端 JSforce 在前端启动 Salesforce 身份验证请求,但我愿意接受其他方法 simpler/better/etc。
运行 jsforce.browser.login()
在我客户的 JS 代码中打开 Salesforce 登录弹出窗口。输入 Salesforce 登录凭据后,Salesforce 系统重定向到我定义的回调 URL,导致页面显示以下文本:
Social Network Login Failure
An error occurred while attempting to login via your social network account.
该页面地址栏中的 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
都是 blank/empty。
我还尝试将 access_token
从 URL 的哈希发送到我的 Salesforce API 端点(见下文),但这导致了 400 错误(“不正确的值").
这是我在 views.py 中定义 SocialLoginView
的方式,基于 dj-rest-auth's social auth documentation:
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 社交身份验证在此应用程序中起作用?
我想通了并让它工作:当发布到我的 dj-rest-auth Salesforce API 端点时,我只在我的 POST 正文中包含 access_token
。我实际上需要 access_token
和 key
,其中 key
是 Salesforce 登录 URL ("https://login.salesforce.com"
).
确实在 django-allauth instructions for Salesforce 中,但我误解了措辞。我现在知道它说在 POST 正文中需要 access_token
和 key
。