【问题标题】:Using the provider uid in firebase security rules在 Firebase 安全规则中使用提供者 uid
【发布时间】:2018-01-12 09:42:59
【问题描述】:

我有一个仅使用 Google 身份验证的 Firebase 应用程序。我想让从未通过我的 Firebase 项目进行身份验证的用户根据身份验证提供程序的 uid 访问数据库的某些部分。我想使用目录 API 检索 Google uid,然后将它们存储在白名单节点中。

whitelist: {
  12345678: true,
  23456789`: true
},
data: {}

那我想在安全规则中做这样的事情:

"rules": {
  "data": {
    ".read": "root.child('whitelist/' + auth.providerUid).exists()
  }
}

或者是这样的:

"rules": {
  "data": {
    ".read": "root.child('whitelist/' + auth.providerData[0].uid).exists()
  }
}

但是是否可以在安全规则中访问提供者 uid?如果是这样,它是如何工作的?

【问题讨论】:

  • 为什么不能使用auth.uid
  • 因为我希望能够在 G Suite 用户通过 Firebase 应用进行身份验证之前将其列入白名单。所以我想加入白名单的用户可能还没有 Firebase uid。
  • 有趣。我只见过这种类型的电子邮件地址白名单。与您的方法相比,您认为它有什么缺点吗?
  • @Frank van Puffelen:我看到的缺点是电子邮件地址不能在路径中使用,因为不允许使用点。当然,我可以将点替换为另一个字符,然后在安全规则中使用正则表达式来确定是否允许访问。
  • @FrankvanPuffelen:刚刚发现我可以使用替换功能来建立一个基于电子邮件地址的白名单。这是docs 中的示例

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


【解决方案1】:

根据reference documentation,语法似乎略有不同:

firebase.identities

与此用户帐户关联的所有身份的字典。字典的键可以是以下任何一种:emailphonegoogle.comfacebook.comgithub.comtwitter.com。字典的值是与帐户关联的每个身份提供者的唯一标识符数组。例如,auth.token.firebase.identities["google.com"][0] 包含与该帐户关联的第一个 Google 用户 ID

看来你需要auth.token.firebase.identities["google.com"][0]。我必须承认我从来没有使用过这个,因为我的安全规则只依赖于用户的主 ID:auth.uid

【讨论】:

  • 嗨弗兰克,感谢您回答我的问题。我只是在阅读文档中的同一页面,但您在我之前几秒钟发布了。
  • 不用担心,文档有时有点难以浏览。让我知道它是否有效,因为我从未真正尝试过。
猜你喜欢
  • 2021-02-01
  • 2018-02-10
  • 2018-08-15
  • 2016-06-17
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 2016-03-26
相关资源
最近更新 更多