2016-08-01 7 views
2

Ich versuche, die E-Mail/Passwort-Authentifizierung von einem Benutzer in Swift auf iOS zu lösen. Ich habe gelesen the documentation und geschafft, Facebook-Authentifizierung ohne ein Problem zu verknüpfen und zu lösen. Nach dem erfolgreichen Verknüpfen der E-Mail-/Kennwort-Anmeldeinformationen ist das Objekt providerData jedoch null. Die providerID ist „Firebase“ aber wenn ich passieren, dass an den unlink Code der folgende Fehler ausgelöst:Firebase entsperren E-Mail/Passwort Auth von Benutzer auf iOS

Error Domain=FIRAuthErrorDomain Code=17016 "User was not linked to an account with the given provider." UserInfo={NSLocalizedDescription=User was not linked to an account with the given provider., error_name=ERROR_NO_SUCH_PROVIDER} 

Der unlink Code Ich verwende ist:

let providerId = (FIRAuth.auth()?.currentUser?.providerID)! 
print("Trying to unlink:",providerId)  // providerId = "Firebase" 
FIRAuth.auth()?.currentUser?.unlinkFromProvider(providerId) { user, error in 
    if let error = error { 
     print("Unlink error:", error) 
    } else { 
     // Provider unlinked from account successfully 
     print("Unlinked...user.uid:", user!.uid, "Anonymous?:", user!.anonymous) 
     } 
    } 

die Dokumentation lesen und haben bekam es funktioniert für Facebook, erwartete ich, dass das Array ProviderData mit etwas nach der E-Mail-Authentifizierung gefüllt wird. Also ist mein Linking Code falsch (es wirft keinen Fehler und scheint gut zu funktionieren)?

Meine Verbindungskode:

let credential = FIREmailPasswordAuthProvider.credentialWithEmail(email, password: password) 

FIRAuth.auth()?.currentUser!.linkWithCredential(credential) { (user, error) in 
    if user != nil && error == nil { 
     // Success 
     self.success?(user: user!) 
     dispatch_async(dispatch_get_main_queue(), { 
      self.dismissViewControllerAnimated(true, completion: nil) 
      if type == "new" { 
       print("New user logged in...") 
      } 
      if type == "existing" { 
       print("Existing user logged in...") 
      } 
     }) 
    } else { 
     print("Login error:",error) 
     self.showOKAlertWithTitle("Login Error", message: error!.localizedDescription) 
    } 
} 

Alle Hinweise, wie ich mein Ansatz ändern wäre toll.

Antwort

1

Verwenden Sie die providerData-Eigenschaft, um die Profilinformationen abzurufen, die von den Anmeldeanbietern abgerufen wurden, die mit einem Benutzer verknüpft sind.

if let user = FIRAuth.auth()?.currentUser { 
    for profile in user.providerData { 
    // Id of the provider (ex: facebook.com) 
    let providerID = profile.providerID 
    } 
} else { 
    // No user is signed in. 
} 

Aufruf FIRAuth.auth() ?. current? .providerID zu "Feuerbasis" führen wird.

Verwandte Themen