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

Posted

技术标签:

【中文标题】具有 facebook 身份验证和唯一 ID 的 Firebase 规则【英文标题】:Firebase Rules with facebook Authentication and Unique IDs 【发布时间】:2018-04-27 16:06:43 【问题描述】:

我正在寻找一些建议或可能的解决方案来加强我的 Firebase 规则。

这是我在 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】:

我最终使用 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"
        ,

【讨论】:

以上是关于具有 facebook 身份验证和唯一 ID 的 Firebase 规则的主要内容,如果未能解决你的问题,请参考以下文章

具有社交媒体身份验证的用户的 Firebase 重置密码问题

每个提供商的 firebase 用户 ID 是唯一的(facebook、twitter、密码)

为使用电子邮件和 facebook_id 的 Web 和移动设备创建用户创建/身份验证系统

Firebase 身份验证中的用户 ID 如何在所有身份验证提供程序(Google、Facebook、Github)中都相同?

在依赖 Auth0 进行 Facebook 身份验证的应用程序中选择用户 ID?

使用 Facebook 进行身份验证的网站的 REST API