2017-02-02 10 views
0

私は今この問題を2日間処理しています。私は、正しくユーザーにサインインする際に多くのトラブルを抱えています。私はユーザーを印刷する関数を実行していますか?毎秒.uid。正しく動くかどうかを確認することができます。中およびサインアウトFirebaseのログインとログアウトの問題

問題は似ています:ログインするとき、私はまだ私のデバッグセッションで毎秒「ゼロ」を参照してください。アプリを閉じると、ホーム画面をタップしてアプリを削除し、アプリを再び開くと、ユーザーは?uidが自動的にログインしているので正しく表示されます。私の質問はここにあります:このコードで何が問題なのですか?初めて正しくサインインしないのですか?

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

コードのメールアドレスとパスワード、アカウント作成のための::これはFacebookの認証のためのコードである

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

この私のデバッグが言っている:

ユーザーのACCESは、トークン(省略可能です)

ユーザーのUIDはオプション( "C8rBXwFTejSCAoVmV4EhNRZ6a9n1")

ログアウトしようとしています

新しいユーザー価値の:ユーザーのUIDは、結果として、私のデバッグがユーザのUIDで満たされますとそれは文句を言わない、正しくログアウト

(「C8rBXwFTejSCAoVmV4EhNRZ6a9n1」)はオプションです

nilを

ユーザーのACCESは、トークンがあります。もう一度:そのアプリケーションを閉じて、それを再オープンすると、nilを表示することで修正されます。

はどのようにそれは私がログインしてFacebookのために適切にサインアウトするたびに閉じて、私のアプリを再開する必要があるということができますか?私は間違って何をしていますか?

更新:これは奇妙です。それを私が直した。最初に、他のVCが参照可能な他のVCにこのコード行を追加しました。let user = FIRAuth.auth()?currentUser 私はその行を削除し、それをすべての関数に別々に追加しました。今それは動作します。そして、これは私の時間-_-私の首を壊すの時間後

答えて

1

回答ました:

まず、私は他の値と他のVCでのコード行を持っていたが、他のVCのを参照することができます。user = FIRAuthをしましょう。 auth()?currentUser。私はその行のコードを削除し、それをすべての関数に別々に追加しました。今それは動作します。そして、これは私に何時間もかかりました。-_-

関連する問題