当前位置: 首页 > 知识库问答 >
问题:

使用Firebase(Swift)按姓名或电子邮件地址查询用户

公西毅
2023-03-14

我对Firebase和Swift很陌生,在查询时遇到了一些麻烦。因此,基本上我想做两件事:

  1. 查询我的用户,只找到那些在他们的名称(或电子邮件地址)中包含特定字符串的用户,并将他们添加到数组中。
  2. 获取我的所有用户并将他们添加到数组中。

正如您所看到的,我正在使用Firebase的简单登录(稍后我也想添加Facebook登录),并且我正在按用户的uid存储我的用户。

我的规则文件的一部分如下所示:

"registered_users": {
    ".read": true,
    ".write": true,
    ".indexOn": ["name"]
 }

所以每个人都应该对我的这部分数据有读写权限。

我还在他们的网站上阅读了FirebaseiOS指南中的“检索数据”部分,根据该指南,我获取所有用户姓名和电子邮件地址的代码应该可以工作,至少我认为是这样。但事实并非如此。这是我的代码:

func getUsersFromFirebase() {
        let registeredUserRef = firebaseRef.childByAppendingPath("registered_users")
        registeredUserRef.queryOrderedByChild("name").observeSingleEventOfType(.Value, withBlock: { snapshot in
            if let email = snapshot.value["email"] as? String {
                println("\(snapshot.key) has Email: \(email)")
            }
            if let name = snapshot.value["name"] as? String {
                println("\(snapshot.key) has Name: \(name)")
            }
        })
    }

我注意到,在firebase指南中,他们总是使用ChildAdded类型,而不是Value,但对我来说Value更有意义。有值的输出为nothing,有ChildAdded的输出只有一个用户,即当前登录的用户。

所以我的问题是:

  1. 我可以使用我当前的数据结构进行此查询吗?还是必须摆脱通过用户的uid对用户进行故事化?
  2. 如果是,我将如何更改我的代码,使其工作?
  3. 如果没有,存储我的用户并使按名称查询它们成为可能的最佳方式是什么?
  4. 如何查询例如“集合”并仅获取用户Simple elogin: 1(Max Mustermann)?

我希望我的描述足够详细。Thx提前感谢您的帮助。

补充资料:

奇怪的是,“检索数据”指南说,可以按高度查询和排序以下数据。

数据:

这不正是我想要做的吗?

共有2个答案

赵禄
2023-03-14

回答您的问题

1)是的,您可以使用当前结构进行查询。查询可以深入1个子级,但不能在子级的子级中进行。

2)如果是,我将如何更改我的代码,使其工作?

以下是按用户姓氏进行查询的快捷方式:

Firebase *usersNodeRef = your users node 'registered_users'
FQuery *allUsersRef = [usersNodeRef queryOrderedByChild:@"lastName"];
FQuery *specificUserRef = [allUsers queryEqualToValue:@"aLastName"];

[specificUser observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot) {

  NSDictionary *dict = snapshot.value;
  NSString *key = snapshot.key;

  NSLog(@"key = %@ for child %@", key, dict);

}];

如何查询例如“muster”并仅获取用户simplelogin:1(Max Mustermann)?

在uses节点结构中,用户存储在具有键的节点中。。关键是simplelogin:1等快照。钥匙会显示出来的。所以这是关键/价值对交易。。。

值=snapshot.value键=snapshot.key

苏野
2023-03-14

我遇到过类似的情况,我想从子节点中提取数据。

https://groups.google.com/d/msg/firebase-talk/Wgaf-OIc79o/avhmN97UgP4J

我可以推荐的第一件事是不要将Firebase查询视为SQL查询,因为它们不是。它们就像是一个轻松的问题。

其次,如果要查询,需要将数据展平,因为查询只能进行一级深度(不能真正查询子注释中的数据)

最后,如果您不想将数据扁平化,请选择一个概念性选项来回答您的问题;

  1. 如果可能,请在registered users节点上观察SingleEventofType:FEventTypeValue。这将把所有注册用户读取到快照中

我已经运行了许多测试和性能方面的测试,除非您有数千个用户,否则这是微不足道的。

希望有帮助!

 类似资料:
  • 实现django 2登录和注册的最佳方式是什么instagram.com.用户可以用用户名和电子邮件或电话和密码注册。注册后,用户可以用电子邮件地址、电话号码或用户名登录。 谢谢

  • 问题内容: 我正在尝试创建一个auth后端,以允许我的用户使用他们的电子邮件地址或他们在Django 1.6中使用自定义用户模型的用户名登录。当我使用用户名登录时,后端工作正常,但由于某种原因,没有电子邮件。有什么我忘记要做的事吗? 编辑:按照建议,我已从ModelBackend继承并将其安装在我的设置中。在我的设置中,我有这个(,)并且我将后端更改为这个: 现在我得到一个错误。 问题答案: 遵循

  • 我在试着从他的电子邮件里得到一个用户名。我知道有一些简单的方法可以实现这一点,但它让我怀疑我是否可以只使用Regex来实现这一点。 让我们假设用户输入以下电子邮件:user.sure_name123@mail.co 从该字符串中,我想提取:user sure name

  • 问题内容: 我正在尝试使用他们的电子邮件地址在appengine数据存储区中查找用户。我正在使用Go。 此代码找不到任何用户。 如果我更改查询以使用“ Id”属性查找用户,则可以正常工作。 我已经确认“ AccountEmail”的属性名称和值正确。“ AccountEmail”它也被索引。 为了使查询正常工作,是否需要使用电子邮件地址进行某些特殊格式设置? 问题答案: 为了通过电子邮件()查找用

  • 问题内容: 给定以下电子邮件地址-someone@example.com-如何使用javascript从该地址提取某人? 谢谢。 问题答案: 匹配的正则表达式 安全检查 写成一行 带替换的正则表达式 安全检查 写成一行 分割字符串 安全检查 写成一行

  • 我已经实现了登录用户名或电子邮件在我现有的项目和工程罚款。我想将其扩展为使用用户名、电子邮件或电话登录。我想要一个用户登录用户名,电子邮件或电话号码和密码。 这是我的代码App\Http\Controllers\Auth\LoginController 应用程序\Http\控制器\Auth\注册控制器 注册工作正常,我可以将用户电话存储到用户表中。我已将电子邮件的输入类型更改为views/auth