我使用的是最新的Firebase API(3.2.1),我使用此代码检查用户是否已登录:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
if(self.navigationController != nil){
self.navigationController!.setNavigationBarHidden(true, animated: true)
}
if(FIRAuth.auth() != nil){
self.performSegueWithIdentifier("loginSuccessSegue", sender: self)
}
}
Run Code Online (Sandbox Code Playgroud)
换句话说,如果存在auth对象,我将切换到其他控制器.在那个控制器上,我有一个退出按钮,它正在这样做:
do{
try FIRAuth.auth()?.signOut()
self.performSegueWithIdentifier("logoutSegue", sender: self)
}catch{
print("Error while signing out!")
}
Run Code Online (Sandbox Code Playgroud)
我没有得到这个操作的错误,但当我切换到登录控制器时,这个auth对象存在,我再次切换回带有数据的控制器.我还尝试检查auth中的当前用户对象,它是否存在且有效.
任何人都知道我如何正确退出?
我想在我的iOS应用程序中使用Firebase 3登录用户.这是我的代码:
do {
databaseReference.child("Users").child(CUUID!).removeAllObservers()
try FIRAuth.auth()?.signOut()
print("FIRUSER - \(FIRAuth.auth()?.currentUser)")
self.performSegueWithIdentifier("logOutSegue", sender: self)
} catch let logOutError {
print("Error Logging User Out - \(logOutError)")
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是如果用户成功注销,则执行segue返回登录屏幕.为了检查用户是否已注销,我打印currentUser以查看是否还有用户.我按下logOut按钮并且segue工作(没有捕获 - >没有错误),但是当print("FIRUSER - \(FIRAuth.auth()?.currentUser)")代码运行时,我仍然得到一个currentUser.为什么用户没有注销?
之前会问这个问题: Firebase注销无法在Swift中正常工作 使用Firebase 3注销用户,Swift仍然显示`currentUser'Firebase -iOS Swift:FIRAuth.auth()。signOut()未注销当前用户
但是,所有答案都不适用于我。我有VC 1,用户可以在其中登录,并且在viewdidappear中,我有打印该用户的打印文件。在VC 2中,我有一个按钮,应该注销用户并返回VC1。VC2中的代码2:
@IBAction func logOut(_ sender: UIButton) {
if FIRAuth.auth()?.currentUser != nil {
do {
try! FIRAuth.auth()!.signOut()
} catch let error as NSError {
print(error.localizedDescription)
}
}
FBSDKAccessToken.setCurrent(nil)
loggedIn = false
storedValuesData.setValue(nil, forKey: "savedLoginEmail")
storedValuesData.setValue(nil, forKey: "savedLoginPassword")
jumpToVC1()
}
Run Code Online (Sandbox Code Playgroud)
当我回到VC 1时,当用户按下注销按钮时,打印将再次打印用户的UID。但是该用户应注销,因此打印应为零。当我确定用户已注销时,如何确保仅显示VC 1?我以为完成块会很好,但是我不确定在这里如何工作...