Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Правила безопасности и аутентификация Firebase

Правила безопасности Firebase обеспечивают контроль доступа и проверку данных в формате, поддерживающем несколько уровней сложности. Для создания систем доступа на основе пользователей и ролей, обеспечивающих безопасность данных пользователей, используйте аутентификацию Firebase с правилами безопасности Firebase.

Определить пользователей

Аутентификация идентифицирует пользователей, запрашивающих доступ к вашим данным, и предоставляет эту информацию в качестве переменной, которую вы можете использовать в своих правилах. Переменная auth содержит следующую информацию:

  • uid : уникальный идентификатор пользователя, назначенный запрашивающему пользователю.
  • token : карта значений, собранных аутентификацией.

Переменная auth.token содержит следующие значения:

Поле Описание
email Адрес электронной почты, связанный с учетной записью, если таковой имеется.
email_verified true если пользователь подтвердил, что у него есть доступ к адресу email . Некоторые провайдеры автоматически проверяют принадлежащие им адреса электронной почты.
phone_number Номер телефона, связанный с учетной записью, если таковой имеется.
name Отображаемое имя пользователя, если установлено.
sub UID пользователя Firebase. Это уникально в рамках проекта.
firebase.identities Словарь всех идентификаторов, связанных с учетной записью этого пользователя. Ключи словаря могут быть любыми из следующих: email , phone , google.com , facebook.com , github.com , twitter.com . Значения словаря представляют собой массивы уникальных идентификаторов для каждого поставщика удостоверений, связанного с учетной записью. Например, auth.token.firebase.identities["google.com"][0] содержит первый идентификатор пользователя Google, связанный с учетной записью.
firebase.sign_in_provider Поставщик входа, использованный для получения этого токена. Может быть одной из следующих строк: custom , password , phone , anonymous , google.com , facebook.com , github.com , twitter.com .

Если вы хотите добавить настраиваемые атрибуты проверки подлинности, переменная auth.token также будет содержать любые указанные auth.token настраиваемые утверждения .

Когда пользователь, запрашивающий доступ, не вошел в систему, переменная auth имеет значение null . Вы можете использовать это в своих правилах, если, например, вы хотите ограничить доступ на чтение для аутентифицированных пользователей - auth != null . Однако обычно мы рекомендуем дополнительно ограничить доступ для записи.

Дополнительные сведения о переменной auth см. В справочной документации для Cloud Firestore , Realtime Database и Storage .

Используйте информацию о пользователе в правилах

На практике использование аутентифицированной информации в ваших правилах делает ваши правила более мощными и гибкими. Вы можете контролировать доступ к данным на основе личности пользователя.

В ваших правилах определите, как информация в переменной auth - информация о пользователе запрашивающего - соответствует информации о пользователе, связанной с запрошенными данными.

Например, ваше приложение может захотеть убедиться, что пользователи могут только читать и записывать свои собственные данные. В этом сценарии вам нужно, auth.uid переменная auth.uid с идентификатором пользователя в запрошенных данных:

Cloud Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    // Make sure the uid of the requesting user matches name of the user
    // document. The wildcard expression {userId} makes the userId variable
    // available in rules.
    match /users/{userId} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

База данных в реальном времени

{
  "rules": {
    "users": {
      "$userId": {
        // grants write access to the owner of this user account
        // whose uid must exactly match the key ($userId)
        ".write": "$userId === auth.uid"
      }
    }
  }
}

Место хранения

service firebase.storage {
  // Only a user can upload their file, but anyone can view it
  match /users/{userId}/{fileName} {
    allow read;
    allow write: if request.auth != null && request.auth.uid == userId;
  }
}

Определите настраиваемую информацию о пользователе

Вы можете дополнительно использовать переменную auth для определения настраиваемых полей, назначенных пользователям вашего приложения.

Например, предположим, что вы хотите создать роль «администратора», которая разрешает доступ для записи по определенным путям. Вы назначаете этот атрибут пользователям, а затем используете его в правилах, предоставляющих доступ по путям.

В Cloud Firestore вы можете добавить настраиваемое поле к документам пользователей и получить значение этого поля с помощью встроенного чтения в ваших правилах. Итак, ваше правило на основе администратора будет выглядеть следующим образом:

Cloud Firestore

service cloud.firestore {
  match "some_collection/": {
    // Remember that, in Cloud Firestore, reads embedded in your rules are billed operations
    write: if request.auth != null && get(/databases/(database)/documents/users/$(request.auth.uid)).data.admin) == true;
    read: if request.auth != null;
  }
}

Для правил в базе данных и хранилище реального времени создайте настраиваемые утверждения в проверке подлинности. Затем вы можете ссылаться на эти настраиваемые утверждения с auth.token переменной auth.token .

База данных в реальном времени

{
  "rules": {
    "some_path/$sub_path": {
      // Create a custom claim for the admin role
      ".write": "auth.uid != null && auth.token.writer == true"
      ".read": "auth.uid != null"
      }
    }
  }

Место хранения

service firebase.storage {
  // Create a custom claim for the admin role
  match /files/{fileName} {
    allow read: if request.auth.uid != null;
    allow write: if request.auth.token.admin == true;
  }
}

Чтобы увидеть больше примеров основных правил, использующих аутентификацию, см. Основные правила безопасности .