提供的 Facebook 登录 JS SDK 通过“Facebook 企业登录”与用户登录(用户访问令牌又名 UAT)流程配合使用,但不适用于企业登录(系统用户访问令牌又名 SUAT)。
我们目前使用用户访问令牌登录流程,因为它成功打开了 Facebook 登录弹出窗口,并在成功进行身份验证和授权后返回访问令牌。但是,我们希望使用系统用户访问令牌来使用不会过期的令牌,并将令牌附加到业务而不是用户。
我尝试遵循以下文档,但没有成功。
此代码在 Angular 应用程序中使用,但我能够毫无问题地使用 SDK。
此流程使用 UAT 配置 ID。这使用连接到企业帐户的 FB 个人资料。登录对话框工作正常,我可以完成流程并检索必要的令牌,以便与我们的后端服务器交换它。
<!-- FB SDK in index.html -->
<script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_US/sdk.js"></script>
...
FB.init({
appId: [Facebook App ID],
version: 'v15.0',
cookie: true,
});
...
FB.login(async (response: StatusResponse) => {
// login logic goes here...
}, {
config_id: [User Login config ID],
auth_type: 'reauthenticate' // "rerequest" & "reauthorize" works as well...
}
但是,当我们尝试使用 SUAT 配置 ID 时,登录会以两种不同的方式中断。第一个示例显示了成功通过 Facebook 进行身份验证后的错误消息。
FB.login(async (response: StatusResponse) => {
// login logic goes here...
}, {
config_id: [Business Login config ID],
auth_type: 'reauthenticate' // "rerequest" & "reauthorize" will also give the same error page.
}
然后,当我们尝试使用其文档中提到的
auth_type
code 时,FB 登录弹出窗口完全中断,并显示一条不同的消息。尽管他们的文档中特别提到了 auth_type
code,但我发现很奇怪的是 Facebook JS SDK 的 Definitely Typed Repo 没有将 code 作为他们选择的一部分。所以我手动将 'code' 添加到 auth_type
选项中。
FB.login(async (response: StatusResponse) => {
// login logic goes here...
}, {
config_id: [Business Login config ID],
auth_type: 'code',
override_default_response_type: true,
}
两种配置中定义的所有范围均已获得高级权限批准。我已经尝试了上述设置的许多不同配置(API 版本、auth_types 等),但似乎只有 UAT 配置适用于 FB JS SDK。
我注意到在过去的几个月里有更多关于这个问题的搜索结果。自 2023 年 1 月以来,我们一直在处理这个问题。如果有人有解决方法或建议,我们将不胜感激!
有运气吗?我使用与 SUAT 的“代码”相同的响应类型,但经过几步后,它说哎呀出了问题。不知道问题所在