【问题标题】:Search information by user on firebase按用户在 Firebase 上搜索信息
【发布时间】:2015-03-12 17:46:45
【问题描述】:

这可能很简单,很抱歉... 我正在尝试创建一个应用程序,我可以在其中创建用户并通过 Firebase 存储信息。这里有一个例子:

http://image.noelshack.com/fichiers/2015/11/1426182307-log.png

但如果有人想创建新用户,现在我想检查该名称是否已经存在。

我如何在不知道他们 id 的情况下获取个人用户信息,例如 simplelogin:54?

我找到了这个话题Get users by name property using Firebase,但这不是一回事,因为在我的情况下,我不认识“用户”之后的孩子

干杯,

【问题讨论】:

  • 您对用户有什么了解?您必须知道某事才能查找它们。

标签: search firebase


【解决方案1】:

就像弗兰克所说,您必须了解用户的一些信息才能找到她/他。

但是,这是一个一般性的答案。我假设“名称”是指您创建的属性“标识符”。

建议


简答

  1. 要通过identifiant 属性检查用户是否存在,您需要orderByChild("identifiant") 并使用.equalTo("<identifient_here>") 查询特定用户。

例如,检查是否有 identifient="aaa" 的用户,

var usersRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/Users");
var identifient = "aaa";
usersRef.orderByChild("identifiant").equalTo(identifient).once("value", function(snapshot) {
  console.log("Loaded user by identifient:",identifient,snapshot.val());
});
  1. 如果您想通过键查询(例如simplelogin:53),您可以使用orderByKey() 而不是orderByChild() 进行查询...或者只是将 ref 设置为用户的键,如下所示:
var userKey = 'simplelogin:53';
var userRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/Users" + userKey);
userRef.once("value", function(snapshot) {
  console.log("Loaded user",snapshot.val());
});

长(呃)答案

UserFactory 示例

  • 看看这个工作PLNKR example
  • 它与我的一个公共 Firebase 实例相关联。
  • 我像你一样在/Users 中创建了相同的simplelogin:53 用户。
  • 如果您搜索 identifient = aaa,您将获得正确的用户。
  • 此处的控制器实现仅用于示例目的,并没有真正做任何有价值的事情。仅供参考。

数据

{
  "Users" : {
    "simplelogin:53" : {
      "identifiant" : "aaa"
    }
  }
}

用户工厂

.factory('UserFactory', function($q, $firebaseObject, fbUrl){
  return function(userId){
    var deferred = $q.defer();
    if (userId.isNotEmpty()) {
      var userRef = new Firebase(fbUrl + '/Users/').orderByChild("identifiant").equalTo(userId);
      userRef.once("value", 
        function(dataSnapshot){
          if (dataSnapshot.val()) {
            console.log("Loaded user",dataSnapshot.val());
            deferred.resolve(dataSnapshot.val());
          } else {
            console.info("Couldn't find user by id",userId);
            deferred.reject("No user found by identifient = '"+userId+"'");
          } 
        },
        function(error){
          console.error("Error loading user",error);
          deferred.reject(error);
        }
      );
    } else {
      deferred.reject("No id entered!");
    }
    return deferred.promise;
  }
})

控制器

.controller('HomeController',function($scope, UserFactory) {
  $scope.identifient = '';
  var showError = function(errorMessage) {
    if (errorMessage) {
      showUser(false);
      $scope.error = errorMessage;
    } else {
      delete $scope.error;
    }
  }
  var showUser = function (userObject) {
    if (userObject) {
      showError(false);
      $scope.user = userObject; 
    } else {
      delete $scope.user;
    }
  }
  $scope.loadUser = function() {
    var userPromise = new UserFactory($scope.identifient);
    userPromise.then(function(data){
      showUser(data);
    }).catch(function(error){
      showError(error);
    });
  }
 })

模板

<div ng-controller="HomeController">
  <h2>Home Template</h2>
  <input ng-model="identifient" placeholder="identifient"/>
  <button ng-click="loadUser()">Find User</button>
  <hr/>
  <div ng-if="user">User: {{user}}</div>
  <div ng-if="error">Error: {{error}}</div>
</div>

希望有所帮助。

【讨论】:

  • 哇,非常感谢!它有助于!但我可能还不够清楚。事实上,我想检查用户的联系人姓名:image.noelshack.com/fichiers/2015/11/1426336575-capture.png 当用户登录并想查看他的联系人时,我不知道如何将 firebase ID 与用户朋友的姓名联系起来。在这个例子中,simplelogin:53 有 simplelogin:54 作为朋友。我怎样才能知道 simplelogin:53 的所有朋友的名字?
  • 我的控制器:f (authData) { console.log("登录为:",authData.uid); var friends = Db.ref.child("Users").child(authData.uid).child("Contacts").child("Friends"); var obj= $firebaseObject(朋友); ....我现在该怎么办?
  • 如果您的安全规则允许,您可以使用Query 执行此操作。查看.orderByChild().equalTo() 的文档
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 2019-03-23
  • 1970-01-01
  • 2019-07-18
  • 2015-09-04
  • 1970-01-01
  • 2010-10-22
相关资源
最近更新 更多