Firebase v3 Query by Grandchild

旧城冷巷雨未停 提交于 2019-12-29 08:19:04

问题


When registering new email/password type users, I need to make user that the displayName that they enter does not already exist in my Realtime Database before calling .createUserWithEmailAndPassword. So I need a query. I need to get a list of all displayName's in my users branch. I am confused as to how to gather this for each user which is denoted by each users auth.uid.

What would the retrieval look like? I am thinking something like:

firebase.database().ref('users/' + allUserIds).equalTo('Joe');

but I know that allUserIds is not valid. Can someone help me with this?

{
  "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"
    }
  }
}

回答1:


You'd use Firebase queries for that:

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')
});

Don't forget to define an index on users:

{
  "rules": {
    "users": {
      ".indexOn": "displayName"
    }
  }
}



回答2:


Just thought I'd share my somewhat fleshed out solution. Call with 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;
}());


来源:https://stackoverflow.com/questions/38515142/firebase-v3-query-by-grandchild

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!