2014-10-09 48 views
1

我有一个数据结构,可将用户数据添加到其唯一标识,如下所示。使用auth.uid作为密钥并为其及其子添加规则的Firebase

"users" : 
    { 
     "user_id": 
     { 
      "name":"John Doe", 
      "email":"[email protected]", 
      "account":"limited", 
      "avatar" : "this will be a base64 data string" 
     } 
    } 

我想拒绝用户从上市的其他用户,我也想登录的用户在此基础上从auth.uid

得到我曾尝试一些规则的“USER_ID”来访问他们的数据:

{ 
    "rules" : 
    { 
     "users" : 
     { 
      ".read" : "false", 
      ".write" : "auth != null && !data.exists() && newData.exists() ", 
      ".validate" : "newData.child('user_id').hasChildren(['name', 'email', 'account','avatar'])", 
      "user_id" : 
      { 
       ".read" : "auth.uid === user_id", 
       ".write" : "false", 
       "avatar" : 
       { 
        ".write" : "!data.exists() && newData.exists() && auth.uid === user_id", 
        ".read" : "auth.uid === user_id" 
       }   
      } 
     } 
    } 
} 

现在牢记“user_ID的”可以是任何东西,每个用户的变化,我怎么能实现呢?我有办法解决其他问题吗?

回答

6

你需要采取的火力地堡文档仔细看这里找到:https://www.firebase.com/docs/security/guide/user-security.html

您需要使用通配符路径来代表每一个用户是这样的:

{ 
    "rules": { 
    "users": { 
     "$user_id": { //this is the WILDCARD path 
     // grants write access to the owner of this user account 
     // whose uid must exactly match the key ($user_id) 
     ".write": "$user_id === auth.uid" 
     } 
    } 
    } 
} 

通配符路径的解释: https://www.firebase.com/docs/security/api/rule/path.html

最后,我不建议以这种方式存储电子邮件,因为无论如何都可以通过simpleLogin获取。

相关问题