web-dev-qa-db-ja.com

新しいオブジェクトをFirebaseにプッシュするときにカスタムIDを設定する方法

アプリケーションでAngularJSでFirebaseを使用しています。ユーザーがFacebook認証を使用してアプリにログインするときに、新しいユーザーオブジェクト(Facebookからのプロパティと、アプリに関連するプロパティ)を作成し、Firebaseに保存します。簡単です。新しいUserオブジェクトをプッシュしています。

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

Push()は一意のIDsmthを生成します。のように:-J08SgyOeOU_fFb1CB3G。したがって、このUserオブジェクトにアクセスできる唯一の方法は、次のIDを使用することです。

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

しかし、Facebookから認証データを受け取ったとき、私はFacebook IDしか持っておらず、以前に生成されたFirebase IDを知る方法がありません(そうでなければ、すべてのユーザーのマップを維持する必要がありますが、これは望まない)。質問は次のとおりです:Facebook IDなどのカスタムIDを使用して新しいユーザーをFirebaseに保存するにはどうすればよいですか?

12

Push()を使用する代わりに、FacebookIDでset()を使用します。

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

単純なログインと複数の認証プロバイダーを使用している場合(例:FacebookとTwitterを同時に) iDが衝突する可能性があるため、必ずプロバイダーごとにユーザーを分割してください。

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

更新

FirebaseSimpleLogin 1.0以降、プロバイダー間で一意のuidを使用できるようになりました。

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

次のようなことも試すことができます。

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

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

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

出力は次のようになります。

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