具有Facebook身份验证和唯一ID的Firebase规则

时间:2017-11-14 16:11:46

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

我正在寻求一些建议或可能的解决方案,以加强我的火力规则。

这是Firebase中的用户树:

users
    |_male
         |_uid

    |_female
         |_uid

创建帐户时,UID将是一个纪元时间戳,这是一个有符号整数。

这些是firebase规则,基本上可以确保用户在可以读取或写入用户之前已经登录并通过Facebook验证:

"users": {
       "male":{
          ".indexOn": ["uid"]
       },
       "female":{
         ".indexOn": ["uid"]
       },
       ".read": "auth != null  && auth.provider === 'facebook'",
       ".write": "auth != null && auth.provider === 'facebook'"
},

我只希望用户读/写他们的树,例如:

users->male->uid->1233254...

我担心上面的规则,他们可能会从另一个用户树中读取和写入。

如果我可以将应用程序UID与Facebook UID进行比较,那就太棒了。 我确实在数据库的另一棵树上捕获了这个细节,例如:

user_fbuid
         |_fbuid
               |_facebook:a1244dxs
                                 |_uid

我在这里有更好的规则来检查auth.uid

"user_fbuid": {
      "fbuid":{
        "$fbuid": {
          ".indexOn": ["fbuid"],
          ".read": "$fbuid === auth.uid && auth.provider === 'facebook'",
          ".write": "$fbuid === auth.uid && auth.provider === 'facebook'"
       }
   },
},

如果有人有任何想法,我很乐意听。感谢

1 个答案:

答案 0 :(得分:2)

我最终使用facebook id属性作为我自己的uid和以下规则:

"$uid": {
          // only the user can read and write to their tree
          ".read": "auth != null  && auth.provider === 'facebook' && auth.token.firebase.identities['facebook.com'][0] === $uid",
            ".write": "auth != null  && auth.provider === 'facebook' && auth.token.firebase.identities['facebook.com'][0] === $uid"
        },