我有一个使用 firebase UI 来登录用户的 Web 应用程序。我们已经将 firebase 配置中的身份验证域替换为运行应用程序的自定义域,并且还尝试切换到signInWithPopup,但社交提供商 Facebook 和 Microsoft 似乎没有在某些 iOS 和 macOS 设备上工作,同时在其他设备上工作。虽然使用 Google 登录适用于所有人。
就像在我的应用程序中一样,我可以在印度通过 firebase UI 轻松登录 Microsoft,但在相同的 iOS 版本上我无法在美国这样做。更奇怪的是,在 macOS 上,我可以在印度和乌克兰通过 Facebook 登录应用程序,但在美国则不行。这可能与地区无关,而是与特定设备有关。但对我来说,由于所有设备本质上都是相同的,我似乎没有弄清楚这个问题。我也已经验证过,所有不同设备上的浏览器设置都是相同的。
`
const 授权 = firebase.auth();
const uiConfig = {
callbacks: {
signInSuccessWithAuthResult : function(authResult, redirectUrl)
{
document.getElementById('loader').style.display = 'block';
return false;
},
uiShown: function()
{
document.getElementById('loader').style.display = 'none';
}
},
signInOptions: [
firebase.auth.GoogleAuthProvider.PROVIDER_ID,
'microsoft.com',
firebase.auth.FacebookAuthProvider.PROVIDER_ID,
firebase.auth.EmailAuthProvider.PROVIDER_ID,
firebase.auth.PhoneAuthProvider.PROVIDER_ID,
],
};
// Initialize the FirebaseUI Widget using Firebase.
const ui = new firebaseui.auth.AuthUI(authorization);
// The start method will wait until the DOM is loaded.
ui.start('#firebaseui-auth-container', uiConfig);
脚本>`
这是我的代码片段,我用它来渲染 firebase UI。对于它不工作的设备,实际发生的是:
- 页面加载
- 用户选择使用 Microsoft 登录
- 用户被带到 Microsoft 页面(通过重定向或弹出窗口,在我们的例子中并不重要)
- 用户在 Microsoft 页面上完成登录
- 用户被带回到我们的页面,但现在登录用户界面消失并且加载程序不可见
我还通过查看本地存储中的 firebase 用户记录来检查未登录的用户。
注意:对于其他设备(正在工作的设备),在返回登录页面时,它会尝试提取用户的登录令牌,如果获取到它,则会将其添加为 cookie,并且应用程序将按预期工作。
firebase.auth().onIdTokenChanged(async (user) => { if (user) { user.getIdToken().then(function (accessToken) { document.cookie = @Json.Serialize(FirebaseAuthConfiguration.CookieName) + "=" + accessToken.toString() + "; path=/"; }); } });
其工作正常的设备:
Windows 机器
安卓设备
iPhone 在印度
设备存在以下问题:
iPhone、iPad(微软和 Facebook 不适用于美国和乌克兰“您的文本”)
Macbook(Facebook 无法使用乌克兰)
Macbook (Facebook and Microsoft not working USA and Ukranine
尝试将 firebase 配置中的 auth 域替换为运行应用程序的自定义域,也切换到signInWithPopup