首页 > 解决方案 > FIRAuth.addAuthStateDidChangeListener 会等到初始化结束后再调用监听器吗?

问题描述

Firebase Auth for iOS 有关该addAuthStateDidChangeListener功能的文档指出:

将块注册为“auth state did change”侦听器。在以下情况下调用:

  • 该块被注册为监听器,

  • 与当前用户具有不同 UID 的用户已登录,或

  • 当前用户已退出。

该块在添加后立即根据其标准调用语义在主线程上异步调用。

上面的第一点和最后一段让我感到困惑。如果我在初始化 Firebase 后立即添加侦听器,是否可以在 Firebase Auth 从上一个会话中恢复用户之前调用侦听器?

在这种情况下,如何区分空用户的监听器调用是因为没有用户还是因为用户还没有恢复?

标签: firebasefirebase-authentication

解决方案


确实有可能在身份验证状态恢复之前调用 auth 状态侦听器,在这种情况下,侦听器最初会以“用户未登录”状态调用,然后再以“用户已登录”状态调用”。

现在的 Android SDK 实际上隐藏了第一个身份验证状态,但我认为 iOS SDK 不会这样做。不过,您可能想尝试一下。只需登录应用程序,关闭应用程序,等待至少一个小时(以便您的访问令牌已过期)并再次启动应用程序。

我不确定大多数开发人员如何处理这个问题,但我知道这两种方法:

  1. 明确重定向到登录页面。因此,如果您在没有用户的情况下获得身份验证状态,请显示登录页面的链接。在初始“未登录”的场景中,这意味着用户将看到此页面片刻,直到恢复登录状态。
  2. 使重定向等待刷新。这本质上只是一个超时,类似于“检测登录状态”或类似的东西。对于知道自己不会登录的用户,您可能还想在其中包含一个明确的重定向链接。

我同意这些都不是移动应用程序的理想选择,所以我很想看看其他人是怎么做的。


推荐阅读