Firebase v3 Query by Grandchild

后端 未结 2 986
时光取名叫无心
时光取名叫无心 2020-12-18 13:56

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

相关标签:
2条回答
  • 2020-12-18 14:29

    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;
    }());
    
    0 讨论(0)
  • 2020-12-18 14:32

    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"
        }
      }
    }
    
    0 讨论(0)
提交回复
热议问题