如何根据数据库用户ID(而不是uid)设置firebase规则

时间:2015-06-10 20:07:02

标签: javascript firebase firebase-security

您好我的fb数据库中有一个用户列表。成功注册后会自动生成用户标识,并且每个用户条目都具有名称,电子邮件和uid。此外,这些属性中的每一个都在/ index中编入索引,这样我就可以轻松查找用户的id来获取uid。

根据文档,firebase说使用write:$ user_id === auth.uid

如何使用生成的ID而不是uid来完成此操作?

这是fb db:https://medviz.firebaseio.com/

1 个答案:

答案 0 :(得分:5)

在您的用户对象中,会有像这样的用户

users : {
 user1234abc:{         
       name: "abc"         
    },                    
    user2434dbcc:{         
       name: "abc"         
    } 
}   

您将在用户对象中包含多个unique key/user nodes,例如user1234abcuser2434dbcc

该唯一键可以在规则中命名为variable,无需将其命名为$user_id,您可以将其称为任何您想要的,例如您可以将变量命名为$any_variable唯一用户密钥

并在auth.id中,只要用户成功验证同一个唯一ID在auth.uid中,那么当您编辑与该用户相关的信息时,您可以使用auth.uid的任何数学

例如,如果auth.uid包含user1234abc并且user1234abc正在编辑此对象user1234abc:{name: "abc" },则符合.write规则,他将能够

请参阅下面的更新视图

更新了视觉层次结构:

--schema--
users : {
           ________________
          |
    user1234abc:{          |
       name: "abc"         |  
    },                     |
    user2434dbcc:{         |
       name: "abc"         |
    }                      |
}                  key can be name as any variable  in rules
                           |
-- rules--
                           | 
{                          | 
  "rules": {               |
    "users": {             |
      ".read": true,       |
           ________________|___________  
          |                            |
         \|/                           | 
      "$any_variable": {              \|/     
        ".write": "$any_variable === auth.uid"
      }
    }
  }
}