私はIonic/Firebaseの新機能ですが、データベースアクセスに関連するすべてが私の工場にあるようにコードをクリーンアップしようとしています。Ionic/Firebaseから常に最新のユーザーオブジェクトを取得するための工場を作成します
ユーザーを構造化する方法は、FacebookやGoogleを含む新しい認証のuidが、関連付けられたキーとともにuids配列に格納されるということです。ユーザーは最初にユーザー配列に格納されます(これは上記のキーがランダムに生成された場所です)。これにより、Authオブジェクトから現在のユーザーにアクセスできます。今、私は、現在のユーザーの詳細を取得する任意のコントローラから呼び出すことができます工場を作成しようとしています
{
"uids" : {
"7d34fb85-813c-4586-857e-f062aed67f32" : {
"-KDQDk5vwJXmFngwI7iQ" : {
"registered" : true
}
}
},
"users" : {
"-KDQDk5vwJXmFngwI7iQ" : {
"email" : "[email protected]",
"firstname" : "TestName",
"lastname" : "TestLastName",
"uid" : "7d34fb85-813c-4586-857e-f062aed67f32"
}
}
}
- など、
を姓を最初に名前をしかし、私はこれがあるとは思いません物事を働かせる正しい方法。理想的には、どのコントローラでもUsers.getCurrentUser.firstname
に電話したいと思っています。
ここに2つの工場があります。何が間違っているのですか?コードを再構築するにはどうしたらいいですか?
/**
* Authentication service
*/
app.factory('Auth', ['rootRef', '$firebaseAuth', function (rootRef, $firebaseAuth) {
return $firebaseAuth(rootRef);
}]);
/**
* Anything related to the Users array
*/
app.factory('Users', ['$firebaseArray','$firebaseObject', 'Auth', function ($firebaseArray, $firebaseObject, Auth) {
var ref = new Firebase("https://[myfirebaseurl].firebaseio.com");
var users = $firebaseArray(ref.child('users'));
var uids = $firebaseArray(ref.child('uids'));
return {
all: function() {
return users;
},
get: function (id) {
// Simple index lookup - I also want to be able to use this if a user lets say clicks a user profile in a list of profiles in the app to view a profile, but currently I have no user_id key in my database - do I need to set this up?
return users[id];
},
getCurrentUser: function() {
var uid = Auth.$getAuth().uid;
var key = new Firebase(uids + uid).child();
var user = new Firebase(users + key).child();
return $firebaseObject(user);
}
}
}])
ご迷惑をおかけして申し訳ありません。
ありがとうございました。
をあなたがの絵を含めましたあなたの質問のJSONツリー。 Firebaseデータベースの[Export]ボタンをクリックすると、実際のJSONをテキストとして置き換えてください。 JSONをテキストとして検索可能にすることで、実際のデータを使ってテストしたり、答えに使用したりすることができます。一般的には、これは良いことです。 –
@FrankvanPuffelen変更が表示されます。 –