在注册新的电子邮件/密码类型用户时,我需要让用户在调用displayName
之前,我的实时数据库中尚未存在他们输入的.createUserWithEmailAndPassword
。所以我需要一个查询。我需要获取displayName
分支中所有users
的列表。我很困惑如何为每个用户auth.uid表示的每个user
收集这个。
检索结果如何?我想的是:
firebase.database().ref('users/' + allUserIds).equalTo('Joe');
但我知道allUserIds
无效。有人可以帮我这个吗?
{
"users" : {
"6mJb9vtpbDelyyjirKEf6sSEj8h1" : {
"name" : "asdfs@asdf.com",
"provider" : "password",
"displayName" : "Joe"
},
"T7D7qEOPPHXjKSzglKheGJDQNkE3" : {
"name" : "gfdsdf@hlkjh.com",
"provider" : "password",
"displayName" : "Jane"
},
"kTG9R0V4aXYsogQfgF633KFYtzV2" : {
"name" : "Andre3000",
"provider" : "google.com",
"displayName" : "Andre"
}
}
}
答案 0 :(得分:2)
您可以使用Firebase查询:
var users = firebase.database().ref('users');
var joes = users.orderByChild('displayName').equalTo('Joe');
joes.once('value', function(snapshot) {
console.log('A Joe does '+(snapshot.exists()?'':'not ')+' exist')
});
不要忘记在users
上定义索引:
{
"rules": {
"users": {
".indexOn": "displayName"
}
}
}
答案 1 :(得分:0)
我想我会分享一些有点充实的解决方案。致电myApp.displayNameExists('Joe')
。
var myApp = (function() {
var pub = {};
pub.displayNameExists = function(name) {
var users = firebase.database().ref('users');
var duplicate = users.orderByChild('displayName').equalTo(name);
duplicate.once('value').then(function(snap) {
if (snap.val()) {
console.log('found. ask for new display name');
} else {
console.log('name unique. ok to write this user to db');
}
}, function(error) {
// The Promise was rejected.
console.error(error);
});
}
//API
return pub;
}());