2017-07-03 4 views
-1

firebaseを使用しているiOSアプリケーションに問題があります。私は、次のコードでサインアウトしています:Firebase signOutが正常に動作しない

 @IBAction func logoutDidTap(_ sender: Any) { 
      try! FIRAuth.auth()?.signOut() 

アプリのUIは、サインアウトを反映しているが、私は次のコンソールメッセージ取得しています:メディア/で [Firebase /データベース] [I-RDB03812]リスナーが失敗しました:PERMISSION_DENIEDを また、別のユーザーの資格情報でサインインすると、そのアプリは古いユーザーとしてサインインされます。

override func viewDidAppear(_ animated: Bool) {   

    //user logged in? 
    FIRAuth.auth()?.addStateDidChangeListener({ (auth, user) in 
     if let user = user { //signed in 
      DatabaseReference.users(uid: user.uid).reference().observeSingleEvent(of: .value, with: { (snapshot) in 
       if let userDict = snapshot.value as? [String: Any] { 
        self.currentUser = User(dictionary: userDict) 
       } 
      }) 
     }else { 
      self.performSegue(withIdentifier: Storyboard.showWelcome, sender: nil) 
     } 
    }) 

+1

看板アウトがスタックにプッシュし、他のリスナーの前にポップされた条件があります可能性が高い以上のものを。したがって、アプリケーションはログアウト後にFirebaseノードを読み取ろうとしています。したがって、許可は拒否されました。これは、トップレベルのオブザーバを持ち、そのクロージャ内でサインアウト機能を含む他のイベントが発生している状況です。 – Jay

+0

あなたの古い質問に戻って、答えを正しいとマークするかフィードバックを返す必要があります。質問をして答えを出す人々にフィードバックを与えないのは悪い形です。 – AgRizzo

答えて

0

私が助けてくれたことは知っていませんが、現在のユーザーがログインしているかどうかを確認するためにAppDelegateにaddStateDidChangeListenerを追加しています。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    FIRApp.configure() 
    handle = FIRAuth.auth()?.addStateDidChangeListener({ (auth, user) in 
     if FIRAuth.auth()?.currentUser != nil{ 
      // go to main screen if there is a user logged in 

     }else{ 

      //go to login screen 

     } 

    }) 


    return true 
} 
0

このコードをAppDelegateにdidFinishLaunchingWithOptionsの下に追加しました。 。これは、ユーザーがログインしている場合のViewControllerをスキップ

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

     FIRApp.configure() 

// MARK: Skip splash screen and login, if user is logged in 
     storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) 
     let currentUser = FIRAuth.auth()?.currentUser 
     if currentUser != currentUser 
     { 
      self.window?.rootViewController = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") 
     } 
     else 
     { 
      self.window?.rootViewController = self.storyboard?.instantiateViewController(withIdentifier: "ViewController") 
     } 
     return true 
} 
関連する問題