Tutorial: Using rules to control authentication

Serverless DatabaseSecurity Rules Using rules to control authentication

[[service]] gives you full control over user authentication. Login providers are server-side components that authenticate your users. Choose a built-in login provider for a common authentication use case, or build your own custom login provider to address special login needs.

No matter how you authenticate your user, this action defines the auth variable in your Security and [[service]] rules. This variable contains the user's auth payload, which includes that user's unique identifier (uid), and the name of the provider they logged with:

Field Description Type
uid A unique user ID, intended as the user's unique key across all providers. String
provider The authentication method used, in this case: password. String

See details of the auth fields on Authentication chapter

Built-in providers also add provider-specific fields to auth, such as the user's name. If you implement a custom login provider, you can add your own fields to your user's auth payload.

Typically, you'll store all of your users in a single users node whose children are the uid values for every user. If you wanted to restrict access to this data such that only the logged-in user can see their own data, your rules would look something like this:

{
  "rules": {
    "users": {
      "$uid": {
        // grants write access to the owner of this user account whose uid must exactly match the key ($uid)
        ".write": "auth !== null && auth.uid === $uid",
        // grants read access to any user who is logged in with an email and password
        ".read": "auth !== null && auth.provider === 'password'"
      }
    }
  }
}