通过iOS中的Listener检查Firebase当前登录用户

Fre*_*ash 10 listener ios firebase swift firebase-authentication

我已经实施了Firebase授权,可以通过Facebook和Google登录我的iOS应用.我正在编写Swift.当应用程序启动时,我需要检查用户是否已经登录才能呈现正确的ViewController(例如,如果没有人登录我会出现登录视图控制器,否则我会呈现主视图控制器).如果我使用Firebase提供的"简单"解决方案,意思是

if FIRAuth.auth()?.currentUser != nil {
  // User is signed in.
  // ...
} else {
  // No user is signed in.
  // ...
}
Run Code Online (Sandbox Code Playgroud)

因此,检查当前用户是否为零,它恰好发生Firebase指南(https://firebase.google.com/docs/auth/ios/manage-users)警报可能发生的意义

"注意:currentUser也可能是nil,因为auth对象还没有完成初始化.如果你使用监听器来跟踪用户的登录状态,你不需要处理这种情况."

所以我想按照指南中的建议实现监听器:

handle = FIRAuth.auth()?.addStateDidChangeListener() { (auth, user) in
  // ...
}
Run Code Online (Sandbox Code Playgroud)

侦听器还将处理中间状态,以便在创建Auth对象时触发它.重点是我真的无法让它正常工作.任何人都可以帮我使用这个监听器来检查用户是否登录?

谢谢

ron*_*ory 12

我已经实现了这样:

FIRAuth.auth()?.addStateDidChangeListener { auth, user in
  if let user = user {
    // User is signed in. Show home screen
  } else {
    // No User is signed in. Show user the login screen
  }
}
Run Code Online (Sandbox Code Playgroud)

如果在检查后不需要User对象,则可以if let user = user使用布尔测试替换,如下所示:

FIRAuth.auth()?.addStateDidChangeListener { auth, user in
  if user != nil {
    // User is signed in. Show home screen
  } else {
    // No User is signed in. Show user the login screen
  }
}
Run Code Online (Sandbox Code Playgroud)

放置监听器的位置(来自评论):

对于我过去检查用户是否已登录的情况,将其放在viewDidLoad特定视图控制器的开头就足够了.但是,如果您有任何需要在每次进入特定视图控制器时进行检查的情况,那么最好将它放在开头viewDidAppear.但我想在大多数情况下,如果用户进入视图,您只需要检查一次