通过电子邮件限制Firebase用户
我有一个客户希望能够列出可以访问数据的受限电子邮件。 因此,任何来到应用程序的人都无法读取/写入任何数据(理想情况下甚至无法登录,但我认为Firebase不可能这样做)。 有关如何去做这件事的任何想法? 我曾想过收到一系列可接受的电子邮件,并检查他们的电子邮件是否存在于安全规则中,但似乎并不奏效。 我在数据库中有以下内容:
"validEmails": ["test@test.com"]
然后在安全规则中:
".read": "root.child('validEmails').val().indexOf(auth.token.email) > -1"
但看起来你不能在这些安全规则中使用indexOf
。
也许我需要有一个可接受的电子邮件列表,然后当用户注册时,它会检查他们是否在列表中,并将他们的UID添加到接受的列表中? 我想我可以通过云端功能来做到这一点?
任何帮助将非常感激。
干杯
一旦启用Firebase的身份验证模块,我相信您无法将其限制为电子邮件地址或域名。 但是,您可以另一种方式保护数据库。 如果您的用户已经注册并且您知道他们的用户uid
,那么您可以根据这些用户限制读取和写入权限。
让我们假装你在数据库中有一个acl
对象,你可以用它们的读/写权限列出用户和他们的uid
。
这些规则将检查每个请求并仅允许授权用户访问数据。
{
"acl": {
[
{
"uid: "abc123"
"canRead": true,
"canWrite": true
},
{
"uid": "def456",
"canRead": true,
"canWrite": false
}
},
"secure": {
".read": { root.child('acl').child(auth.uid).child('canRead').val() == true }
".write": { root.child('acl').child(auth.uid).child('canWrite').val() == true }
}
}
在数据库中拥有允许用户的电子邮件列表:
"whitelist": {
"fred@gmail%2Ecom": true,
"barney@aol%2Ecom": true
}
由于键不允许使用句点,因此在存储句点之前,需要使用句点转义字符串。
然后在数据库规则中:
{
"rules": {
"whitelist": {
".read": false,
".write": false
},
".read": "root.child('whitelist').child(auth.token.email.replace('.', '%2E')).exists()",
".write": "root.child('whitelist').child(auth.token.email.replace('.', '%2E')).exists()"
}
}
用户的电子邮件可通过auth.token.email
访问。 您需要避开点( .
- > %2E
)并检查密钥是否存在于白名单中。
这些规则不允许任何人读取或写入数据库的/whitelist
部分的访问权限。 修改只能通过Firebase控制台进行。
感谢球员,我最终做的是有一个可接受的电子邮件列表:
{
"validEmails": ["test@test.com"],
"validUsers": {}
}
然后运行云功能来检查用户是否注册了他们的电子邮件是否在有效的电子邮件列表中。 如果是,则将它们添加到有效的用户列表中,如果不是,则删除新创建的用户。 我还设置了数据规则,以便只有validUsers内的用户才能访问数据。
前端然后处理无效用户的重定向等。
链接地址: http://www.djcxy.com/p/84225.html上一篇: Restrict Firebase users by email
下一篇: Firebase: How to provide read/write access to different users?