我想使用经过身份验证的用户的电子邮件域来限制对firestore中信息的访问。
我能弄清楚如何做到这一点的唯一方法就是:
match /organization-secrets/{org} {
allow read: if request.auth.email.split('@')[1] == org
}
由于电子邮件地址可能包含多个@,因此很容易被电子邮件欺骗,例如:
hacker@bigcorp.com@h4xxor.net
是否有其他方法可以限制基于域的访问?
答案 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"