更新:由于代码重构,测试的需求已经消失,正如Ron在接受的答案中指出的那样,onAuthStateChange()
最终会触发,应用程序可以依赖在那。我原本没有看到这一点,这就是我的问题的动机。
原始问题:我一直在使用window.localStorage
并搜索以'firebase:authUser'
开头的密钥,以确定我的应用是否可以使用firebase验证事件很快就会发生。无论成功还是失败,都会触发firebase.auth().onAuthStateChanged()
,我可以在那里处理结果。想要知道的原因是,如果我拥有正在处理的某些本地凭据,我的应用可以显示“请等待...”#39;输入消息。但如果没有,它可以立即重定向到登录页面。由于firebase已移至indexedDB
,此代码不再有效,而且我无法找到任何等效的黑客来查找本地持久凭据(可能现在不可能?)。
我也很乐意切换到SESSION
持久性而不是LOCAL
,但我不确定这是否会改变这种情况 - 我仍然需要一种方法来测试是否有任何事情发生,以避免用户被困在“等待......”#39;如果没有要验证的本地凭据,则永远发送消息。
或者我做错了吗?我知道我可以在 firebase.auth().onAuthStateChanged()
触发之前显示登录页面,但到那时用户可能已经点击了,如果他们已经登录,那么体验并不是很好刷新页面,他们再次看到登录页面 ,直到所有内容都被加载。
我无法在auth()
API中找到任何内容来判断它是否在处理本地持久凭据的过程中,直到现在,window.localStorage
hack一直在工作好。现在管理用户体验的最佳方式是什么?
答案 0 :(得分:1)
依赖于底层实现绝不是一个好主意,而不是提供公共API。 Firebase有权随时更改。他们甚至可以用不同的格式来保持用户,这会破坏你的实现。
也就是说,您可以轻松绕过此问题,方法是在用户登录时在localStorage
设置您自己的标记,并在用户注销时将其删除。这比依赖你的黑客更好。在这种情况下,您可以完全控制该标志。您可以在用户在onAuthStateChanged
触发后登录时随时设置,并在注销时将其删除。加载页面时,您直接读取该值以了解是否显示进度条。
答案 1 :(得分:0)
您可以将输入灰显并禁用提交按钮,直到.onAuthStateChanged
结算,这种情况很快发生,通常不到1秒。也许在登录表单上放一个linear progress indicator?