【发布时间】:2017-01-16 15:15:14
【问题描述】:
当用户访问我的站点时,我使用onAuthStateChanged 来确定用户是否已经从之前的会话中登录。
主要问题是对于一小部分用户来说不一致 - 代码似乎没有检测到他们确实正在进行有效的登录会话。
以下代码在应用程序本身上,用户从主页或登录页面重定向后位于该页面上。
该网站的主页还使用onAuthStateChanged 来确定是否应将用户直接重定向到应用程序。登录页面使用signInWithEmailAndPassword,登录成功后重定向到应用页面(代码如下)。
firebase.auth().onAuthStateChanged(function (authUser) {
if (authUser) return initApp(authUser);
// issue: sometimes users that *should* be signed-in get signed in anonymously here
firebase.auth().signInAnonymously().then(function (authUser) {
initApp(authUser);
}
});
onAuthStateChanged 不应该用于我的用例吗?知道如何改进/解决这个问题吗?
编辑:这似乎更多地发生在手机用户身上。
【问题讨论】:
-
确保在登录页面重定向之前等待 signInWithEmailAndPassword 解决。可能是您过早地重定向到应用程序页面。此外,您上面的代码在匿名登录时调用 initApp 两次,因为 onAuthStateChanged 观察者将在匿名登录后再次触发。
-
谢谢。正确 - 代码再次运行,但我在
initApp函数中有一个userInitiated变量来正确处理已经登录的用户。我有时需要调用 initApp 函数来恢复以前的在线状态,即使用户由于 wifi 连接丢失或随机 Firebase 重新连接而因重新连接而离线。 -
是的,我一直在确保在重定向之前已解决 signInWithEmailAndPassword。
-
我得到了同样的结果。我在身份验证下删除了 Firebase 控制台上的用户,但该用户保持登录状态。
标签: javascript firebase firebase-authentication