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 posté ma question sur la communauté Slack de Firebase, personne ne répond. J'ai trouvé celui-ci, mais c'est pour Android: https://groups.google.com/forum/?hl=el#!topic/firebase-talk/4HdhDvVRqHc
J'ai essayé de lire la documentation de Firebase pour iOS, mais je n'arrive pas à comprendre. https://firebase.google.com/docs/reference/ios/firebaseauth/interface_f_i_r_auth
J'ai essayé de taper Xcode comme ceci:
FIRApp().currentUser()
FIRUser().getCurrentUser()
Mais je n'arrive pas à trouver cette fonction getCurrentUser.
if FIRAuth.auth().currentUser != nil {
presentHome()
} else {
//User Not logged in
}
Pour le SDK mis à jour
if Auth.auth().currentUser != nil {
}
Solution dans Swift 3
override func viewDidLoad() {
super.viewDidLoad()
FIRAuth.auth()!.addStateDidChangeListener() { auth, user in
if user != nil {
self.switchStoryboard()
}
}
}
Où 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)
}
if Auth.auth().currentUser?.uid != nil {
//user is logged in
}else{
//user is not logged in
}
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.
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.
}
}
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
}
}
}
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
Une solution objective-c serait (iOS 11.4):
[FIRAuth.auth addAuthStateDidChangeListener:^(FIRAuth * _Nonnull auth, FIRUser * _Nullable user) {
if (user != nil) {
// your logic
}
}];