作者:坏坏纯1990_440 | 来源:互联网 | 2023-02-13 20:32
我已经实施了Firebase授权,可以通过Facebook和Google登录我的iOS应用.我正在编写Swift.当应用程序启动时,我需要检查用户是否已经登录才能呈现正确的ViewController(例如,如果没有人登录我会出现登录视图控制器,否则我会呈现主视图控制器).如果我使用Firebase提供的"简单"解决方案,意思是
if FIRAuth.auth()?.currentUser != nil {
// User is signed in.
// ...
} else {
// No user is signed in.
// ...
}
因此,检查当前用户是否为零,它恰好发生Firebase指南(https://firebase.google.com/docs/auth/ios/manage-users)警报可能发生的意义
"注意:currentUser也可能是nil,因为auth对象还没有完成初始化.如果你使用监听器来跟踪用户的登录状态,你不需要处理这种情况."
所以我想按照指南中的建议实现监听器:
handle = FIRAuth.auth()?.addStateDidChangeListener() { (auth, user) in
// ...
}
侦听器还将处理中间状态,以便在创建Auth对象时触发它.重点是我真的无法让它正常工作.任何人都可以帮我使用这个监听器来检查用户是否登录?
谢谢
1> ronatory..:
我已经实现了这样:
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
}
}
如果在检查后不需要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
}
}
放置监听器的位置(来自评论):
对于我过去检查用户是否已登录的情况,将其放在viewDidLoad
特定视图控制器的开头就足够了.但是,如果您有任何需要在每次进入特定视图控制器时进行检查的情况,那么最好将它放在开头viewDidAppear
.但我想在大多数情况下,如果用户进入视图,您只需要检查一次