swift Firebase停止注册过程

时间:2017-03-28 06:04:57

标签: firebase swift3 firebase-realtime-database firebase-authentication

如果用户名存在,我想停止注册过程。如果用户名存在,我不想创建电子邮件\密码(身份验证)和其他信息

数据库规则:

{
  "rules": {
    "users": {
      ".read": "(auth != null)",
        ".indexOn": ["username"],
      "$uid": {


            "$username":{
          ".write": "(auth != null) && !data.exists() || newData.exists()"

          }



      }
    }
  }
}

我在.write中添加了!data.exists(),但它仍然重复了用户名。 然后我添加".validate"以使用户名至少为3个字符,看看注册过程是否会失败,如果它更长,但它创建了电子邮件\密码和其他东西,但没有在数据库root中写入任何数据\用户\

在使用email \ password注册新用户后,我收到此错误,这意味着用户名不能超过3个字符。 如何在这种情况下停止注册过程并显示警告消息?

  

[Firebase /数据库] [I-RDB03812] setValue:或removeValue:at / users / jt94ARqOoodtU3kYp3W1MtlUZ4m1 failed:permission_denied

如果你能解决问题,请帮助我。

1 个答案:

答案 0 :(得分:1)

您的简化规则是:

{
  "rules": {
     ".write": "(auth != null)",
     "users": {
        "$uid": {
           "username": {
                     ".write": "auth != null  && (!data.exists() || !newData.exists())",

因此,您首先在数据的根目录上授予任何经过身份验证的用户写访问权限,然后说用户只能在当前位置没有数据的情况下进行写入。

这不起作用:一旦你在某个级别授予权限,就不能在较低级别上取消该权限。

Firebase文档将其描述为Read and Write rules cascade

  

子规则只能为父节点已声明的内容授予其他权限。他们无法撤销读取或写入权限。