2016-10-26 10 views
4

2つのアプリケーションが同じFirebaseプロジェクトにあります。 1つのアプリがFirebase Authからユーザを削除しました。しかし、別のアプリはまだどこかからユーザーのuidを取得しているかもしれませんし、キャッシュしていて、Authのuidを使ってFirebaseデータベースのデータにアクセスすることもできます。 ログインを維持すると、私はまだlet user = FIRAuth.auth().currentUserによって "user.uid"を得ることができます。Firebase authからユーザが削除されたかどうかを検出するにはどうすればよいですか?

アプリが両方ともFIRDatabase.database().persistenceEnabled = trueに設定されています。

ユーザーがAuthから適切に削除された場合は、すべてのアプリでキャッシュを更新したり更新したいと思います。

答えて

6

あなたはappDelegate内でこれを行うことによって、それを達成することができます

//Check if user does exists 
    func checkUserAgainstDatabase(completion: @escaping (_ success: Bool, _ error: NSError?) -> Void) { 
     guard let currentUser = FIRAuth.auth()?.currentUser else { return } 
     currentUser.getTokenForcingRefresh(true) { (idToken, error) in 
      if let error = error { 
       completion(false, error as NSError?) 
       print(error.localizedDescription) 
      } else { 
       completion(true, nil) 
      } 
     } 
    } 

をそして、あなたはdidFinishLaunchingWithOptionsで上記の機能を確認した後にこのような何かを行うことができます。

ユーザーが存在しない場合:

self.window?.rootViewController = self.storyboard?.instantiateViewController(withIdentifier: "CustomTabBarViewController") 

else:

self.window?.rootViewController = self.storyboard?.instantiateViewController(withIdentifier: "WelcomeViewController") 

それが正常に機能したかどうかをテストするには、firebaseから認証マネージャーから手動でユーザーを手動で削除します。このように、ユーザーが削除された場合は、ウェルカム画面が表示されます。 Firebase 4.0と

+0

は完璧なソリューションをありがとう! "error.localizedDescription"は "この識別子に対応するユーザーレコードがありません。ユーザーは削除されている可能性があります。" – reten

+0

問題はありません:)助けてくれること - –

+0

私には2つの質問があります。まず、これはオフラインでも動作しますか?ユーザーがオフラインの場合でも、引き続きアプリを使用できるようになります。次に、ユーザーが2つの異なるデバイスから接続されている場合、1つのデバイスからアカウントを削除します(一方のデバイスはまだ接続されています)。アカウントが削除されたことを他の端末にどのように通知しますか?デバイスはサインアウトします。 –

0

それは次のようになります。

func checkUserAgainstDatabase(completion: @escaping (_ success: Bool, _ error: NSError?) -> Void) { 
    guard let currentUser = Auth.auth().currentUser else { return } 
    currentUser.getIDTokenForcingRefresh(true, completion: { (idToken, error) in 
     if let error = error { 
     completion(false, error as NSError?) 
     print(error.localizedDescription) 
     } else { 
     completion(true, nil) 
     } 
    }) 
    } 
関連する問題