addAuthStateDidChangeListener 被调用两次的问题
Issue with addAuthStateDidChangeListener being called twice
我正在使用 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
功能。您将看到以下内容:
Registers a block as an "auth state did change" listener. To be invoked when:
- The block is registered as a listener,
- The current user changes, or,
- The current user's access token changes.
总而言之 - 立即调用块 get,然后很可能在验证 FIRApp and/or FIRAuth 对象不包含任何陈旧数据后再次调用。所以两次调用回调的行为应该是预期的并适当地管理。
我 运行 遇到了 Jamie22 报告的相同问题。 St运行ge 事情 - 我有两个相似的应用程序设置,但只有一个应用程序在更改时两次调用身份验证状态侦听器方法。
这个解决方法为我解决了这个问题:
var activeUser:FIRUser!
override func viewDidLoad() {
super.viewDidLoad()
FIRAuth.auth()?.addAuthStateDidChangeListener({ (auth:FIRAuth, user:FIRUser?) in
if let user = user {
if(self.activeUser != user){
self.activeUser = user
print("-> LOGGED IN AS \(user.email)")
}
} else {
print("-> NOT LOGGED IN")
}
})
}
通过检查 appUser 是否在身份验证状态更改时发生更改,您可以摆脱第二次调用,因为它将与您在第一次调用中获得的用户相同。
我正在使用 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
功能。您将看到以下内容:
Registers a block as an "auth state did change" listener. To be invoked when:
- The block is registered as a listener,
- The current user changes, or,
- The current user's access token changes.
总而言之 - 立即调用块 get,然后很可能在验证 FIRApp and/or FIRAuth 对象不包含任何陈旧数据后再次调用。所以两次调用回调的行为应该是预期的并适当地管理。
我 运行 遇到了 Jamie22 报告的相同问题。 St运行ge 事情 - 我有两个相似的应用程序设置,但只有一个应用程序在更改时两次调用身份验证状态侦听器方法。
这个解决方法为我解决了这个问题:
var activeUser:FIRUser!
override func viewDidLoad() {
super.viewDidLoad()
FIRAuth.auth()?.addAuthStateDidChangeListener({ (auth:FIRAuth, user:FIRUser?) in
if let user = user {
if(self.activeUser != user){
self.activeUser = user
print("-> LOGGED IN AS \(user.email)")
}
} else {
print("-> NOT LOGGED IN")
}
})
}
通过检查 appUser 是否在身份验证状态更改时发生更改,您可以摆脱第二次调用,因为它将与您在第一次调用中获得的用户相同。