web-dev-qa-db-ja.com

Firebaseのログアウトが機能しないSwift

私は最新の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)
    }
}

つまり、authオブジェクトが存在する場合、他のコントローラーに切り替えています。そのコントローラーには、次のようなサインアウトを行うサインアウトボタンがあります。

do{
    try FIRAuth.auth()?.signOut()
    self.performSegueWithIdentifier("logoutSegue", sender: self)
}catch{
    print("Error while signing out!")
}

この操作でエラーは発生しませんが、ログインコントローラーに切り替えると、この認証オブジェクトが存在し、データのあるコントローラーに再び切り替えられます。また、現在のユーザーオブジェクトをauthで確認しようとしましたが、存在し有効です。

私が適切にサインアウトする方法を知っている人はいますか?

13
Dejan

使用してみてください:

try! FIRAuth.auth()!.signOut()

これは私がIBActionに持っているコードであり、うまく機能しています:

try! FIRAuth.auth()!.signOut()     
if let storyboard = self.storyboard {
    let vc = storyboard.instantiateViewControllerWithIdentifier("firstNavigationController") as! UINavigationController
        self.presentViewController(vc, animated: false, completion: nil)
    }

Swift 4.2アップデート#

try! Auth.auth().signOut()

if let storyboard = self.storyboard {
            let vc = storyboard.instantiateViewController(withIdentifier: "firstNavigationController") as! UINavigationController
            self.present(vc, animated: false, completion: nil)
        }
35
Damien Bannerot

私は同じ問題を抱えており、他の人が提案したコードのさまざまな組み合わせを試していることを付け加えたいと思います。

私にとっての問題は、ストーリーボードでログアウトボタンを設定したときに、ボタンからログインビューコントローラーへのコントロールドラッグによって接続を作成し、それがやりたいことだと思ったということでした。

トリガーされたセグエがログインコントローラーに戻ったためにサインアウトコードが実行されなかったことが判明したため、ユーザーがログアウトされなかったため、ログイン画面に戻り、すぐに2番目のView Controllerに戻りました。

結局、これは私のために働いた:

do {
    try Auth.auth().signOut()
    self.dismiss(animated: true, completion: nil)
    } catch let err {
        print(err)
}

しかし、知らずに作成したセグエを削除しました。

6
Adam Webb