firebase - FIRAuth.addAuthStateDidChangeListener 会等到初始化结束后再调用监听器吗?
问题描述
Firebase Auth for iOS 有关该addAuthStateDidChangeListener
功能的文档指出:
将块注册为“auth state did change”侦听器。在以下情况下调用:
该块被注册为监听器,
与当前用户具有不同 UID 的用户已登录,或
当前用户已退出。
该块在添加后立即根据其标准调用语义在主线程上异步调用。
上面的第一点和最后一段让我感到困惑。如果我在初始化 Firebase 后立即添加侦听器,是否可以在 Firebase Auth 从上一个会话中恢复用户之前调用侦听器?
在这种情况下,如何区分空用户的监听器调用是因为没有用户还是因为用户还没有恢复?
解决方案
确实有可能在身份验证状态恢复之前调用 auth 状态侦听器,在这种情况下,侦听器最初会以“用户未登录”状态调用,然后再以“用户已登录”状态调用”。
现在的 Android SDK 实际上隐藏了第一个身份验证状态,但我认为 iOS SDK 不会这样做。不过,您可能想尝试一下。只需登录应用程序,关闭应用程序,等待至少一个小时(以便您的访问令牌已过期)并再次启动应用程序。
我不确定大多数开发人员如何处理这个问题,但我知道这两种方法:
- 明确重定向到登录页面。因此,如果您在没有用户的情况下获得身份验证状态,请显示登录页面的链接。在初始“未登录”的场景中,这意味着用户将看到此页面片刻,直到恢复登录状态。
- 使重定向等待刷新。这本质上只是一个超时,类似于“检测登录状态”或类似的东西。对于知道自己不会登录的用户,您可能还想在其中包含一个明确的重定向链接。
我同意这些都不是移动应用程序的理想选择,所以我很想看看其他人是怎么做的。
推荐阅读
- python - Keras LSTM 训练和验证数据中的时间步长顺序
- java - ISORequestListener 中的并发问题
- ios - 我可以声明用应用程序范围的首字母缩写词替换画外音吗?
- javascript - 为什么不能将旧的 HTMLElement 对象保存在对象中?
- r - 如何将 `DT::renderDT()` 与 `option` 参数和 `formatCurrency()` 一起使用
- c# - 将用户从目录添加到联系人
- java - 如何从 LocationSettingsResponse 方法中获取 latlng?
- c# - 如何在jqyery中附加选项标签以选择
- sql - sql查询在三个表中计算一些东西
- java - Java iText 移动水印位置