如何基于用户电子邮件域创建Firestore规则?

时间:2018-03-08 13:45:02

标签: google-cloud-firestore

我想使用经过身份验证的用户的电子邮件域来限制对firestore中信息的访问。

我能弄清楚如何做到这一点的唯一方法就是:

match /organization-secrets/{org} {
    allow read: if request.auth.email.split('@')[1] == org
}

由于电子邮件地址可能包含多个@,因此很容易被电子邮件欺骗,例如:

hacker@bigcorp.com@h4xxor.net

是否有其他方法可以限制基于域的访问?

3 个答案:

答案 0 :(得分:1)

实现这一目标的一种方法是创建一个在用户创建时触发的云功能。此云功能可以向用户授予自定义声明令牌

然后你可以在规则中使用它

https://firebase.google.com/docs/auth/admin/create-custom-tokens https://firebase.google.com/docs/auth/admin/custom-claims

答案 1 :(得分:0)

您可以限制最后一个域(并确保已验证电子邮件)。使用String.matches,并确保在正则表达式的末尾包含“ $”。

match /organization-secrets/{org} {
    allow read: if (request.auth.token.email.matches('.*@yourdomainhere[.]com$') && 
        request.auth.token.email_verified)
}

答案 2 :(得分:0)

您也可以将字符串切片并检查@后面的部分是否等于您的域名。

allow read, write: if request.auth.token.email.split("@")[1] == "@gmail.com"