Ios 登录&;Firebase中的注销问题
我正在处理这个问题两天了。我在正确登录和注销用户时遇到很多问题。我正在运行一个函数,该函数将每秒打印一次用户?.uid,以便查看它是否正确 登录和注销问题类似:登录时,我仍然每秒在调试会话中看到“nil”。当我关闭应用程序时,双击主屏幕并删除应用程序,然后重新打开应用程序,用户?.uid显示正确,因为它会自动登录。所以我的问题是:这段代码有什么问题,为什么第一次不能正确登录?这是Facebook身份验证的代码:Ios 登录&;Firebase中的注销问题,ios,swift,facebook,firebase,firebase-authentication,Ios,Swift,Facebook,Firebase,Firebase Authentication,我正在处理这个问题两天了。我在正确登录和注销用户时遇到很多问题。我正在运行一个函数,该函数将每秒打印一次用户?.uid,以便查看它是否正确 登录和注销问题类似:登录时,我仍然每秒在调试会话中看到“nil”。当我关闭应用程序时,双击主屏幕并删除应用程序,然后重新打开应用程序,用户?.uid显示正确,因为它会自动登录。所以我的问题是:这段代码有什么问题,为什么第一次不能正确登录?这是Facebook身份验证的代码: func loginButton(_ loginButton: FBSDKLogin
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
if error != nil {
print(error)
return
}
else if result.isCancelled
{
}else{
print("no error, trying to sign in on facebook")
let credential = FIRFacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString)
FIRAuth.auth()?.signIn(with: credential) { (user, error) in
print(error)
if error == nil{
print("trying to sign into firebase with facebook")
loggedIn = true
self.tryLogin()
self.removeRegisterView()
self.ref = FIRDatabase.database().reference()
self.ref.child("users").child("\(FIRAuth.auth()!.currentUser!.uid)").observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.hasChild("email"){
}else{
print("user has no email setted")
if let user = user {
let user = FIRAuth.auth()?.currentUser
let email = user?.email
self.ref.child("users/\(user!.uid)/email").setValue(email){ (error, ref) -> Void in
//self.setUpNewUser()
}
}
}
})
}
}
}
}
创建电子邮件和密码帐户的代码:
FIRAuth.auth()?.createUser(withEmail: registerEmail.text!, password: registerPassword.text!) { (user, error) -> Void in
if error == nil {
user!.sendEmailVerification(completion: nil) }
这应该是正确登录用户的权利?我的调试仍然每秒都显示“nil”。再次:通过显示正确的用户?.uid,关闭应用程序并重新打开应用程序将解决此问题。但我当然希望它在第一次正确运行
注销具有类似的效果:单击注销按钮时,这是我的代码:
@IBAction func logOut(_ sender: UIButton) {
guard FIRAuth.auth()?.currentUser != nil else {
return
}
do {
print("user's acces token is \(FBSDKAccessToken.current())")
print("user's UID is \(user?.uid)")
print("trying to sign out")
FBSDKAccessToken.setCurrent(nil)
try FIRAuth.auth()!.signOut()
let loginManager = FBSDKLoginManager()
loginManager.logOut()
print("New user value's:")
print("user's acces token is \(FBSDKAccessToken.current())")
print("user's UID is \(user?.uid)")
loggedIn = false
storedValuesData.setValue(nil, forKey: "savedLoginEmail")
storedValuesData.setValue(nil, forKey: "savedLoginPassword")
JumpToVC()
} catch let error as NSError {
print(error.localizedDescription)
}
}
我的意思是:
用户的访问令牌是可选的()
用户的UID是可选的(“C8rBXwFTejSCAoVmV4EhNRZ6a9n1”)
正在尝试注销
新用户值:
用户的访问令牌为零
用户的UID是可选的(“C8rBXwFTejSCAoVmV4EhNRZ6a9n1”)
它无法正确注销,因此,我的调试会被用户的UID填充。再次说明:关闭并重新打开该应用程序将修复它,方法是显示nil
为什么每次我都需要关闭和重新打开我的应用程序才能正确登录和注销Facebook?我做错了什么
更新:哇,这太奇怪了。我修好了。首先,我在另一个VC中有这行代码,其他VC可以引用其他值:let user=FIRAuth.auth()?.currentUser
我删除了那行代码,并将其分别添加到每个函数中。现在它起作用了。这花了我好几个小时--在我断了好几个小时的脖子后,我回答说: 首先,我在另一个VC中有这行代码,其他VC可以引用其他值:let user=FIRAuth.auth()?.currentUser。我删除了那行代码,并将其分别添加到每个函数中。现在它起作用了。我花了好几个小时才发现-_-