2013-08-05 12 views
9

Sto utilizzando Firebase con AngularJS nella mia applicazione. Quando un utente accede all'app con l'autenticazione di Facebook, desidero creare un nuovo oggetto utente (con alcune proprietà provenienti da Facebook e alcuni relativi alla mia app) e archiviarlo in Firebase. È semplice, spingo il nuovo oggetto Utente:Come impostare un ID personalizzato quando si spinge un nuovo oggetto in Firebase

... 
var travelBidsFirebaseRef = new Firebase(url); 
var newUserRef = travelBidsFirebaseRef.child("user").push(user, callback); 
... 

push() genera un ID univoco, smth. come: -J08SgyOeOU_fFb1CB3G. Quindi l'unico modo in cui posso accedere a questo oggetto d'uso è quello di utilizzare questo ID:

angularFire(travelBidsFirebaseRef + "/user/-J08SgyOeOU_fFb1CB3G", $scope, 'user', {}); 

Ma quando ricevo i dati di autenticazione da Facebook ho solo Facebook ID e non c'è modo di me conoscere la Firebase ID generato in precedenza (altrimenti dovrei mantenere una mappa di tutti gli utenti, che non voglio). Quindi, ecco la domanda: come faccio a salvare un nuovo utente sul Firebase con un ID personalizzato, ad es. Facebook ID?

risposta

13

Invece di utilizzare push(), utilizzare set() con l'ID di Facebook:

travelBidsFirebaseRef.child("user").child(facebookId).set(user, callback); 

Se si utilizza semplice login e diversi operatori di Auth (ad esempio Facebook e Twitter, allo stesso tempo) quindi assicuratevi di dividere i vostri utenti di fornitore, come ID possono eventualmente scontrarsi

travelBidsFirebaseRef.child ("user/facebook /" + facebookId) .set (utente, callback);

Aggiornamento

A partire dal FirebaseSimpleLogin 1.0, è ora possibile utilizzare uid, che è unica in tutta fornitori:

new FirebaseSimpleLogin(ref, function(err, user) { 
    if(err) throw err; 
    travelBidsFirebaseRef.child('user/'+user.uid).set(user, callback); 
}); 
5

Si può anche provare qualcosa di simile:

var empsRef = ref.child("employees"); 
 

 
empsRef.child('11111').set({ 
 
    lastname: "Lee", 
 
    firstname: "Kang" 
 
}); 
 

 
empsRef.child('22222').set({ 
 
    lastname: "Nut", 
 
    firstname: "Dough" 
 
});

L'output dovrebbe essere simile a questo:

"employees" : { 
 
    "11111" : { 
 
    "lastname" : "Lee", 
 
    "firstname": "Kang" 
 
    }, 
 
    "22222" : { 
 
    "lastname" : "Nut", 
 
    "firstname": "Dough" 
 
    } 
 
}

Problemi correlati