【发布时间】:2016-10-03 14:42:33
【问题描述】:
我正在使用 Firebase,根据他们的文档,我正在检查用户的登录状态是否发生变化。问题存在于侦听器块中,当应用程序启动(用户登录)时,代码被调用两次。这不是什么大不了的事,但 Firebase 在连接中创建了两个值并删除了这两个值。我将如何解决这个问题?我需要在侦听器中而不是外部获取用户之后调用它,因为如果没有先完成获取用户数据,则无法保证用户将存在于该块之外。
FIRAuth.auth()?.addAuthStateDidChangeListener { auth, user in
if let theUser = user {
// User is signed in.
// CODE IN HERE IS CALLED TWICE UPON APP LAUNCH (WHEN USERS LOGGED IN).... WHY?
self.currentUser = theUser
print("LOGGED IN!!!!")
self.updateUsersStatus(user: self.currentUser)
} else {
// No user is signed in.
self.performSegueWithIdentifier(SEGUE_LOG_IN, sender: self)
}
}
【问题讨论】:
-
通常会发生这种情况,因为您在使用完 addAuthStateDidChangeListener 后没有删除它,而是继续启动它(例如,每次创建或出现视图控制器时,您都会启动 auth 事件,但您没有'当视图消失时不要删除它)
-
检查此链接firebase.google.com/docs/reference/ios/firebaseauth/… 并确保删除 FIRAuthStateDidChangeListenerHandle 以避免重复调用
-
你在哪个函数中调用这个方法?
-
所有这些都在 viewDidLoad 中调用。据我了解,在单击 TabBarController 中的另一个视图后,侦听器停止收听,但是从您所说的不正确,我应该在 viewDidDisappear 中手动取消注册?
-
想通了,我应该一直使用 if let user = FIRAuth.auth()?.currentUser { 因为用户已经登录而不是使用监听器。
标签: ios swift firebase firebase-realtime-database firebase-authentication