8

Ich bin nicht in der Lage zu tun, erfolgreich, folgte ich die folgenden Schritte als auf Firebase Docs angewiesen:Wie mehrere Auth Provider zu einem Firebase-Konto verknüpfen?

  1. im Gebrauch der Unterzeichnung der vorhandenen Authentifizierungsanbieter (mein Fall : facebook).
  2. Füllen Sie das Anmelde-Flow für den neuen Authentifizierungsanbieter bis zu, aber nicht einschließlich, einer der Auth.signInWith Methoden aufrufen (meinem Fall: Ich möchte E-Mail & Passwort und Google OAuth verbinden).. Also das ist der Schritt, über den ich mich nicht im Klaren bin, ich habe einen neuen Provider mit var provider = new firebase.auth.GoogleAuthProvider(); erstellt und ich habe Firebase.auth().signInWithPopup(provider) nicht gemacht.
  3. Dann authcredential für Google zu bekommen Ich betreibe var credential = firebase.auth.GoogleAuthProvider.credential( googleUser.getAuthResponse().id_token); (ich einen undefinierten googleUser Fehler erhalten) dieser Fehler scheint angemessen, da ich in der Verwendung von Google Oauth nicht unterzeichnet haben, aber das ist, was die zweiten Schritte erklärt
  4. (nicht signin) und dann dieser Befehl mit dem aktuellen Benutzer zu verbinden, die auf einem Facebook-Provider ist auth.currentUser.link(credential)

Mein Verständnis ist, dass current zu meinem bestehenden Provider verbunden werden muss (Facebook). Scheinbar wird die Berechtigungsvariable für Google nie berechnet. Jeder mit einem funktionalen Codebeispiel würde wirklich helfen.

Antwort

8

Wenn Sie ein Google- und E-Mail-/Pass-Konto manuell mit einem vorhandenen Firebase-Benutzer verknüpfen möchten, können Sie Folgendes tun: Zuerst sollte der Benutzer bei Facebook angemeldet sein. Verknüpfen Sie die Google-Nutzer:

var provider = new firebase.auth.GoogleAuthProvider(); 
auth.currentUser.linkWithPopup(provider); 

dann die E-Mail-Link/pass Konto:

auth.currentUser.linkWithCredential(firebase.auth.EmailAuthProvider.credential(auth.currentUser.email, 'password')) 

All diese Konten verknüpft werden müssen neu und nicht bereits verbunden sein.

+0

Sie erwähnten es manuell, gibt es eine andere automatische Art der Verknüpfung von Anbietern? – jasan

+1

Nicht genau. Ich denke, ich habe das nicht gut erklärt. Ich meinte manuell wie im Entwickler gewählt, um basierend auf einigen Bedarf zu verknüpfen (brauchen Google-Provider für den Zugriff auf Google Kalender, Upgrade eines anonymen Benutzers, etc). Der andere Fall ist, wenn der Backend-Server dies aus Sicherheitsgründen benötigt. Zum Beispiel signieren Sie Firebase mit Google, die [email protected] zurückgibt. Der Benutzer meldet sich dann mit Facebook auf einem separaten Gerät an, das die gleiche E-Mail-Adresse [email protected] zurückgibt. In diesem Fall wird ein Fehler ausgegeben, dass die Anmeldeinformationen bereits verwendet werden. In diesem Fall müssen Sie Konten verknüpfen, um beide Anbieter zu verknüpfen. – bojeil

+0

@bojeil Ich sehe, dass Sie 'linkWithPopup()' verwendet haben. Was ist dann "linkWithCredential()", das im [Firebase Tutorial] erwähnt wird (https://firebase.google.com/docs/auth/android/account-linking#link-auth-provider-credentials-to-a-user -Konto)? –

Verwandte Themen