2013-08-05 8 views
9

Ich verwende Firebase mit AngularJS in meiner Anwendung. Wenn sich ein Benutzer mit der Facebook-Authentifizierung bei der App anmeldet, möchte ich ein neues Benutzerobjekt erstellen (mit einigen Eigenschaften, die von Facebook und einigen von meiner App stammen) und es in Firebase speichern. Es ist einfach, ich dränge das neue Benutzerobjekt:So legen Sie eine benutzerdefinierte ID fest, wenn Sie ein neues Objekt in Firebase verschieben

push() generiert eine eindeutige ID, etw. wie: -J08SgyOeOU_fFb1CB3G. So ist die einzige Art, wie ich dieses User-Objekt zugreifen kann, ist durch diese ID mit:

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

Aber wenn ich Authentifizierungsdaten von Facebook erhalten habe ich nur ID Facebook und es gibt keine Möglichkeit, mir die Firebase ID zu wissen, früher erzeugt (Ansonsten müsste ich eine Karte aller Benutzer pflegen, die ich nicht möchte). Also hier ist die Frage: Wie speichere ich neue Benutzer in der Firebase mit einer benutzerdefinierten ID, z. Facebook id?

Antwort

13

Statt push() zu verwenden, verwenden set() mit der Facebook-ID:

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

Wenn Sie einfach Login und mehrere Authentifizierungsanbieter verwenden (zB Facebook und Twitter zur gleichen Zeit) dann werden Sie sicher geteilt Ihre Benutzer nach Anbieter, da IDs möglicherweise kollidieren

travelBidsFirebaseRef.child ("Benutzer/facebook /" + facebookId) .set (Benutzer, Rückruf);

aktualisieren

Ab FirebaseSimpleLogin 1.0 können Sie jetzt uid verwenden, die zwischen den verschiedenen Anbietern einzigartig ist:

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

Sie auch so etwas wie dies versuchen:

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

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

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

Die Ausgabe sollte wie folgt aussehen:

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

Verwandte Themen