如何使用用户输入在Firebase中命名孩子?

时间:2018-05-07 20:26:48

标签: ios json swift firebase firebase-realtime-database

我正在尝试在Firebase for iOS上创建一个简单的用户数据库。我有两个文本字段,一个用于获取用户的电子邮件地址,另一个用于获取用户的密码。我希望电子邮件成为用户的uid。我试图通过创建一个名为“email”的变量来实现这一点,我设置的变量等于emailTextField.text!然后我实现了在Firebase中生成子代码的代码,如下所示:

ref = Database.database().reference()

ref.child("users").child(email).setValue(true)

这是我的问题:创建一个孩子并使用变量命名它不起作用。我可以做到以下几点:

ref.child("users").child("email")

但是一旦我拿走“电子邮件”周围的引号使它成为变量,程序就会崩溃。 如何使用用户输入在Firebase中命名孩子?

1 个答案:

答案 0 :(得分:0)

Firebase节点/文档名称不支持电子邮件地址支持的相同字符集,例如。电子邮件地址中的符号会使子名称无效。

如果您尝试将孩子设为 ref.child("users").child("xyz@xyz.xyz") 你应该看到同样的错误。

如果您绝对需要使用电子邮件地址作为节点名称,我建议您以与firebase节点名称规则兼容的方式对电子邮件进行编码。

Link to the rules

编辑:如果您使用的是firebase身份验证,则正常模式也是使用经过身份验证的用户对象返回的UID作为节点名称,而不是从文本字段输入的电子邮件地址。

一个简单的例子:

Auth.auth().signIn(withEmail: email, password: password) { (user, error) in
  if let user = user {
        ref.child("users").child(user.uid).setValue(true)
  }
}