【发布时间】: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