Search code examples
firebasefirebase-securityfirebase-realtime-databasefirebase-authentication

How do I lock down Firebase Database to any user from a specific (email) domain?


I have a small, personal Firebase webapp that uses Firebase Database. I want to secure (lock down) this app to any user from a single, specific domain. I want to authenticate with Google. I'm not clear how to configure the rules to say "only users from a single, specific domain (say @foobar.com) can read and write to this database".

(Part of the issue that I see: it's hard to bootstrap a Database with enough info to make this use case work. I need to know the user's email at the time of authentication, but auth object doesn't contain email. It seems to be a chicken-egg problem, because I need to write Firebase rules that refer to data in the Database, but that data doesn't exist yet because my user can't write to the database.)

If auth had email, then I could write the rules easily.

Thanks in advance!


Solution

  • If you're using the new Firebase this is now possible, since the email is available in the security rules.

    In the security rules you can access both the email address and whether it is verified, which makes some great use-cases possible. With these rules for example only an authenticated, verified gmail user can write their profile:

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

    You can enter these rules in the Firebase Database console of your project.