如何将Firebase数据库锁定到特定(电子邮件)域中的任何用户?

Set*_*add 23 firebase firebase-security firebase-authentication firebase-realtime-database

我有一个使用Firebase数据库的小型个人Firebase webapp.我想从单个特定域向任何用户保护(锁定)此应用程序.我想通过Google进行身份验证.我不清楚如何配置规则来说"只有来自单个特定域(例如@foobar.com)的用户才能读写这个数据库".

(我看到的部分问题:使用足够的信息来引导数据库很难使这个用例工作.我需要在验证时知道用户的电子邮件,但auth对象不包含电子邮件.它似乎是鸡蛋问题,因为我需要编写引用数据库中数据的Firebase规则,但由于我的用户无法写入数据库,因此该数据尚不存在.)

如果auth有电子邮件,那么我可以轻松地编写规则.

提前致谢!

Fra*_*len 43

如果您正在使用新的Firebase,现在可以使用,因为email安全规则中提供了此功能.

在安全规则中,您可以访问电子邮件地址以及是否已经过验证,这使得一些很好的用例成为可能.例如,使用这些规则,只有经过身份验证的经过验证的gmail用户才能编写其配置文件:

{
  "rules": {
    ".read": "auth != null",
    "gmailUsers": {
      "$uid": {
        ".write": "auth.token.email_verified == true && 
                   auth.token.email.matches(/.*@gmail.com$/)"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以在项目的Firebase数据库控制台中输入这些规则.

  • https://firebase.google.com/docs/reference/security/database/#authtoken保存了`auth.token`中提供的文档. (2认同)