web-dev-qa-db-fra.com

Comment vérifier si l'utilisateur dispose d'une Auth Session Firebase iOS valide?

Je veux vérifier si l'utilisateur a toujours une session valide avant de présenter le contrôleur Home View de mon application. J'utilise la dernière API Firebase. Je pense que si j'utilise l'héritage, je pourrai le savoir.

Voici ce que j'ai fait jusqu'à présent:

J'ai essayé de taper Xcode comme ceci:

FIRApp().currentUser()
FIRUser().getCurrentUser()

Mais je n'arrive pas à trouver cette fonction getCurrentUser.

8
user5156051
if FIRAuth.auth().currentUser != nil {
   presentHome()
} else {
   //User Not logged in
}

Pour le SDK mis à jour

if Auth.auth().currentUser != nil {

}
17
Jordi Bruin

Solution dans Swift 3

override func viewDidLoad() {
    super.viewDidLoad()

    FIRAuth.auth()!.addStateDidChangeListener() { auth, user in
        if user != nil {
            self.switchStoryboard()
        }
    }
}

switchStoryboard() est

func switchStoryboard() {
    let storyboard = UIStoryboard(name: "NameOfStoryboard", bundle: nil)
    let controller = storyboard.instantiateViewController(withIdentifier: "ViewControllerName") as UIViewController

    self.present(controller, animated: true, completion: nil)
}

La source

8
DoesData
if Auth.auth().currentUser?.uid != nil {

   //user is logged in

    }else{
     //user is not logged in
    }
4
mut tony

Si vous pouvez voir si un tel utilisateur utilise Auth.auth().currentUser, ceci ne vous indiquera que s'il y a était un utilisateur authentifié, que le compte de cet utilisateur existe toujours ou qu'il soit valide.


Solution complète

La vraie solution à cela devrait utiliser la ré-authentification de Firebase:

open func reauthenticate(with credential: AuthCredential, completion: UserProfileChangeCallback? = nil)

Cela garantit (lors du lancement de l'application) que l'utilisateur précédemment connecté/authentifié est encore en fait _ ​​est et peut être authentifié via Firebase.

let user = Auth.auth().currentUser    // Get the previously stored current user
var credential: AuthCredential

user?.reauthenticate(with: credential) { error in
  if let error = error {
    // An error happened.
  } else {
    // User re-authenticated.
  }
}
3
Will Von Ullrich

Solution dans Swift 4

override func viewDidLoad() {
    super.viewDidLoad()
    setupLoadingControllerUI()
    checkIfUserIsSignedIn()
}

private func checkIfUserIsSignedIn() {

    Auth.auth().addStateDidChangeListener { (auth, user) in
        if user != nil {
            // user is signed in
            // go to feature controller 
        } else {
             // user is not signed in
             // go to login controller
        }
    }
}
3
Edward
override func viewDidLoad() {
FIRAuth.auth()!.addStateDidChangeListener() { auth, user in
            // 2
            if user != nil {
                let vc = self.storyboard?.instantiateViewController(withIdentifier: "Home")
                self.present(vc!, animated: true, completion: nil)
            }
        }
}

Source: https://www.raywenderlich.com/139322/firebase-tutorial-getting-started-2

0
Jeacovy Gayle

Une solution objective-c serait (iOS 11.4):

[FIRAuth.auth addAuthStateDidChangeListener:^(FIRAuth * _Nonnull auth, FIRUser * _Nullable user) {
    if (user != nil) {
        // your logic
    }
}];
0
shanezzar