2016-10-21 1 views
1

Ich bin neu in Firebase und iOS und ich frage mich, ob jemand wüsste, wie man mehrere oAuth Provider verbindet. Ich folgte die Firebase docs und versuchte, diese Funktion zu implementieren:Verknüpfen von oAuth Providern in Firebase iOS

func firebaseSignInWithLink(credential: FIRAuthCredential) { 

     FIRAuth.auth()?.signIn(with: credential, completion: { (user, error) in 
      if error != nil { 
       debugPrint("APP: there has been an error signing into firebase, perhaps another account with same email") 
       debugPrint("APP: \(error)") 

       // if existing email, try linking 
       FIRAuth.auth()?.currentUser?.link(with: credential, completion: { (user, error) in 
        if error != nil { 
         debugPrint("APP: there has been an error signing into firebase") 
         debugPrint("APP: \(error)") 
        } 
        else { 
         debugPrint("APP: successfully signed into firebase") 
        } 
       }) 
      } 
      else { 
       debugPrint("APP: successfully signed into firebase") 
      } 
     }) 
    } 

Die FIRAuth.auth()?.currentUser?.link Funktion nie trotz der oben debugPrint("APP: \(error)") wird aufgerufen aufgerufen wird. Da dies nicht funktioniert, ich erhalte den Fehler unten: "Die E-Mail-Adresse bereits von einem anderen Konto ist \"

Optional (Error Domain = FIRAuthErrorDomain Code = 17007 \ Userinfo = {NSLocalizedDescription = Die E-Mail-Adresse wird bereits von einem anderen Konto, ERROR_NAME = ERROR_EMAIL_ALREADY_IN_USE, [email protected]})“

Jede Hilfe wäre sehr dankbar Danke.! D

+0

Ich arbeite an dem gleichen Problem. Ich habe es noch nicht gemeistert, aber wenn Sie bereits "currentUser" haben (was ich ziemlich sicher bin), sollten Sie die Anmeldung nicht aufrufen, da die Benutzer-E-Mail bereits bei einer vorherigen Anmeldung einem VERSCHIEDENEN IDP zugeordnet war. ..hence der Fehler, den wir sehen ... – Dewey

+0

Ich denke, das Ding, das mich verwirrte, war, wie wir das currentUser-Objekt erhalten können, wenn der Benutzer sich nicht über den oAuth einloggen kann, der den Fehler erzeugte. Muss der Benutzer alle möglichen Authentifizierungsmethoden versuchen, bis er sich erfolgreich anmeldet und das aktuelle Benutzerobjekt abruft, und sich dann erneut bei oAuth anmelden muss, um sie zu verknüpfen? :/ – Clement

Antwort

2

ich glaube, Sie sind verwirrt durch die Anweisungen.Auf Firebase-Dokumentation liest es

Auth Anbieter Anmeldeinformationen zu einem vorhandenen Benutzerkonto verknüpfen:

  1. Anmelden des Benutzer eines beliebigen Authentifizierungsanbieter oder Verfahren.
  2. Füllen Sie den Anmeldevorgang für den neuen Authentifizierungsanbieter bis einschließlich, jedoch nicht einschließlich, eines der FIRAuth.signInWith-Methoden. Ermitteln Sie beispielsweise das Google-ID-Token des Nutzers, das Facebook-Zugriffstoken oder die E-Mail-Adresse und das Passwort.

  3. eine FIRAuthCredential für den neuen Authentifizierungsanbieter Get

So sollten Sie die Methode FIRAuth.signInWith nicht nennen. Ich möchte auch darauf hinweisen, dass Sie einen Link zu einem bestehenden Konto erstellen möchten, sodass Sie sich zuerst anmelden und dann verknüpfen sollten. Deshalb sollten Sie einen aktuellen Benutzer haben.

0

Das Problem trat auf, weil die Firebase-Konsole "Mehrere Konten pro E-Mail-Adresse, die Firebase-Einstellungen setzt" deaktiviert wurde.

+0

Dies wird eine neue UID in Auth einrichten, obwohl ... also mehrere Konten existieren, nicht nur ein Konto mit mehreren Anbietern. Dies kann Probleme verursachen, wenn Sie Persistenz mit einer eindeutigen UID für einen einzelnen Benutzer von mehreren Anbietern benötigen – MattTanner

Verwandte Themen