8

non posso a fare con successo, ho seguito i seguenti passi come indicato a Firebase Docs:Come collegare più provider di autenticazione a un account Firebase?

  1. firmato in uso utilizzando provider di autenticazione esistente (mio caso: facebook).
  2. Completa il flusso di accesso per il nuovo provider di autenticazione fino a, ma non inclusi, chiamando uno dei metodi Auth.signInWith (mio caso: voglio creare un collegamento e-mail & password e Google OAuth).. Quindi questo è il passaggio non chiaro, ho creato un nuovo provider utilizzando var provider = new firebase.auth.GoogleAuthProvider(); e non l'ho fatto Firebase.auth().signInWithPopup(provider).
  3. Poi per ottenere authcredential per Google corro var credential = firebase.auth.GoogleAuthProvider.credential( googleUser.getAuthResponse().id_token); (ottengo un errore googleUser definito) questo errore sembra opportuno visto che non ho firmato a utilizzare Google Oauth ma è ciò che afferma il 2 ° passaggi (per non signin)
  4. e poi questo comando per collegare con l'utente corrente che è su un fornitore Facebook auth.currentUser.link(credential)

mia comprensione è che currentUser deve essere collegato al mio provider esistente (Facebook). Sembra che la variabile credenziale per google non sia mai calcolata. Chiunque abbia un esempio di codice funzionale sarebbe davvero d'aiuto.

risposta

8

Se si desidera collegare manualmente un account google e un account email/pass a un utente Firebase di Facebook esistente, è possibile effettuare le seguenti operazioni: Prima di tutto, l'utente deve accedere a Facebook. collegamento l'utente di Google:

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

Poi collegare l'e-mail/pass conto:

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

Tutti questi conti devono essere collegati devono essere nuovi e non già collegato.

+0

Hai menzionato manualmente, esiste un modo diverso più automatico di collegare i provider? – jasan

+1

Non esattamente. Penso di non averlo spiegato bene. Intendevo manualmente, in quanto lo sviluppatore sceglie di collegarsi in base ad alcune necessità (ha bisogno del provider di Google per accedere a Google Calendar, aggiornare un utente anonimo, ecc.). L'altro caso è quando il server di back-end lo richiede per motivi di sicurezza. Ad esempio, accedi a Firebase utilizzando google che restituisce [email protected] L'utente quindi accede a un dispositivo separato tramite Facebook che restituisce la stessa email [email protected] In tal caso viene generato un errore che le credenziali sono già in uso. Dovrai collegare gli account in quel caso per collegare entrambi i provider. – bojeil

+0

@bojeil Vedo che hai usato 'linkWithPopup()'. Quindi cos'è 'linkWithCredential()' che è menzionato nel [tutorial di Firebase] (https://firebase.google.com/docs/auth/android/account-linking#link-auth-provider-credentials-to-a-user -account)? –