为什么我们必须多次调用 getCurrentUser() Firebase?

时间:2021-05-11 22:08:16

标签: java android firebase google-cloud-firestore firebase-authentication

我正在创建一个日记应用。

我目前正在研究用户是否已经登录的功能——绕过“开始/登录活动”

在我为创建日记应用而观看的视频中,讲师调用 mUser = firebaseAuth.getCurrentUser(); 次。

他在 onStart()onCreate()onAuthStateChanged() 中调用它。我可以理解为什么我们可能需要在 onAuthStateChanged() 中再次调用它,但在这种情况下,我只是检查用户是否已经登录,因此它不应与 {{1} 中收到的用户不同}}

我从 onCreate()onAuthStateChanged() 中删除了它,一切仍然正常。但是,我不确定它是否会导致我将来出错。如果有人能证实这一点,我将不胜感激。 我们需要多次调用 onStart() 是否有原因? 谢谢。

这是我的完整代码供参考:

getCurrentUser()

2 个答案:

答案 0 :(得分:3)

虽然登录是一个活动过程,但您的代码通过调用 signInWith 方法之一触发,维护身份验证状态并在应用重启时恢复它是使用 Firebase SDK 时自动发生的后台过程。这很棒,因为这意味着您无需编写代码来保持令牌有效,也无需检查用户配置文件是否已更改或他们的帐户是否已被禁用。

但这确实意味着您无法在很长时间内可靠地将 firebaseAuth.getCurrentUser() 的值缓存在变量中。如果您将该值保存在一个变量中,然后 SDK 在后台更新身份验证状态,您的代码可能不再查看 firebaseAuth.getCurrentUser() 的正确值。

这就是为什么您会看到比预期更多的对 firebaseAuth.getCurrentUser() 的调用,也是为什么您会在希望在身份验证状态更改时收到通知的地方看到 firebaseAuth.addAuthStateListener,例如用户通过 SDK 登录或退出。

答案 1 :(得分:0)

每次你想检查用户的当前会话时你都必须调用这个方法,因为用户的会话可以从另一个服务或方法中改变,如果你不调用这个方法而只调用一次,你将不会有最新用户的个人资料信息、身份验证会话等。

相关问题