首页 文章

Firebase中的登录和注销问题

提问于
浏览
0

我现在正处理这个问题2天了 . 我在向用户进出正确签名方面遇到了很多麻烦 . 我正在运行一个将每秒打印用户?.uid的函数,所以我可以看到它是否正确 .

登录和退出的问题类似:登录时,我仍然每秒在调试会话中看到“nil” . 当我关闭应用程序,所以双击主屏幕并删除应用程序,并重新打开应用程序,用户?.uid正确显示,因为它会自动登录 . 所以我的问题是:这个代码有什么问题,为什么第一次不会正确登录吗?这是Facebook身份验证的代码:

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) }

这应该正确登录用户吗?我的调试仍然每秒都说“无” . 再次:关闭应用程序并重新打开应用程序将通过显示正确的用户来解决此问题?.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)
    }
}

这是我的调试说:

用户的访问令牌是Optional()

用户的UID是可选的(“C8rBXwFTejSCAoVmV4EhNRZ6a9n1”)

试图退出

新用户 Value :

用户的访问令牌为零

用户的UID是可选的(“C8rBXwFTejSCAoVmV4EhNRZ6a9n1”)

它不会正确注销,结果,我的调试充满了用户的UID . 再次:关闭该应用程序并重新打开它将通过显示nil来修复它 .

怎么可能每次都需要关闭并重新打开我的应用程序才能登录并正确登出Facebook?我究竟做错了什么?

更新:哦,这太奇怪了 . 我修好了它 . 首先,我在另一个VC中使用其他VC可以引用的其他值的这行代码:let user = FIRAuth.auth()?currentUser我删除了该行代码并将其分别添加到每个函数中 . 现在它有效 . 这花了我几个小时-_-

1 回答

  • 1

    在几个小时的脖子上回答:

    首先,我将这行代码放在另一个VC中,其他VC可以引用其他值:let user = FIRAuth.auth()?currentUser . 我删除了那行代码并将其分别添加到每个函数中 . 现在它有效 . 这花了我几个小时才发现-_-

相关问题