我有一个使用FirebaseSimpleLogin的应用程序,但由于我有其他用户数据,我将其存储在[my-firebase] .firebaseio.com / users / [username]下。下面的代码段显示了它是如何完成的
var User = {
create: function (authUser, username) {
users[username] = {
md5_hash: authUser.md5_hash,
username: username,
email: authUser.email,
$priority: authUser.uid
};
users.$save(username).then(function () {
setCurrentUser(username);
});
},
...
由于每个用户的数据都是根据uid优先级的用户名键入的,因此我可以稍后通过uid获取其他用户数据。
当firebase登录事件触发时,我有以下处理程序,它负责查询firebase以获取addala用户数据,并通过方法setCurrentUser(username)
将其存储在$ rootScope.currentUser上
这是我的登录事件处理程序:
var ref = new Firebase(FIREBASE_URL + '/users');
var users = $firebase(ref);
$rootScope.$on('$firebaseSimpleLogin:login', function (e, authUser) {
var query = $firebase(ref.startAt(authUser.uid).endAt(authUser.uid));
query.$on('loaded', function () {
//PROBLEM: console.log(query.$getIndex()) logs an empty array
setCurrentUser(query.$getIndex()[0]);
});
});
一旦登录事件触发,我就可以访问authUser,其中包含登录用户的uid。然后我通过uid查询firebase / users,使用startAt / endAt来限制我的结果,这样我只剩下当前登录的用户。
然后,当从firebase加载查询数据时,我调用setCurrentUser
方法,该方法在$ rootScope上存储currentUser的用户名。
问题
使用startAt / endAt进行的查询过滤不起作用,当我调试时,我正在获取一个空数组.log query.$getIndex()
当我应该使用当前登录用户的用户名获取数组时。
我正在使用firebase 1.0.15,angularFire 0.7.1和firebase-simple-login 1.4.1以及来自Thinkster.io的this tutorial
答案 0 :(得分:0)
最后在我的代码中的某个地方,我的用户绑定上有一个$ save(),以保存他们一直在处理的最后一个项目的id,这导致了$ priority问题。我使用了$ update,现在一切都像魅力一样!
我仍然不知道这是否是$ save()的预期行为 为了澄清并提供更多上下文,我没有将任何键传递给$ save()方法,我只是在我的本地用户引用上添加了一个属性并保存了它
$rootScope.currentUser.lastWorkingProject = projectId;
$rootScope.currentUser.$save();