Есть ли способ ограничить регистрацию в firebase

Есть ли способ запретить пользователям регистрировать учетные записи электронной почты и пароля firebase, чтобы новые пользователи не могли зарегистрироваться? У меня есть небольшое приложение, к которому нужно иметь доступ только несколько админов (которые я создал вручную в администраторе Firebase) и способ его настройки прямо сейчас кажется, что кто-то может вставить небольшой javascript и зарегистрировать учетную запись.

Ответы

Ответ 1

Firebase Simple Login - это абстракция, построенная поверх Пользовательского входа Firebase для удобства. При использовании аутентификации по электронной почте/паролю стоит иметь в виду, что это просто создает сопоставление между этим письмом и паролем и автоматически генерирует токены аутентификации для использования в ваших правилах безопасности.

В вашем конкретном случае, если все пользователи "admin" уже созданы, вы можете достичь поведения, которое вы ищете, с помощью правил безопасности. Например, если вы хотите разрешить доступ только для чтения/записи к вашему дереву данных Firebase для пользователей, прошедших проверку подлинности в этом списке, попробуйте написать правила безопасности для чтения/записи на верхнем уровне, которые требуют, чтобы пользователь находился в списке "admins":

{
  ".read"  : "auth != null && root.child('admins').hasChild(auth.uid)",
  ".write" : "auth != null && root.child('admins').hasChild(auth.uid)"
}

Эти правила выше гарантируют, что пользователь аутентифицирован (через auth != null) и требует, чтобы идентификатор аутентифицированного пользователя был в списке администраторов (root.child('admins').hasChild(auth.uid)).

Последний шаг состоит в том, чтобы на самом деле сделать этих пользователей админами, написав их в поддереве admins. Скажем, у вас есть пользователи 1, 4 и 7, чтобы добавить администраторов, обновите дерево данных, чтобы они отражали следующее:

{
  ...
  "admins": {
    "1": true,
    "4": true,
    "7": true
  }
}

В результате этого, даже если другие пользователи могут генерировать новые сопоставления электронной почты и паролей с использованием Firebase Simple Login, эти сопоставления не будут влиять на ваше приложение, поскольку оно ограничено с помощью правил безопасности.

Ответ 2

@RobDiMarco предоставил отличный ответ, но у него есть недостаток.

Правило root.child('admins').hasChild(auth.uid) будет проходить, в случае, если auth.uid будет пустой строкой.

Вы можете протестировать это в Firebase Database Security Simulator, очистив поле uid ({ "provider": "anonymous", "uid": ""}).

Результаты моделирования

Это правило root.child('admins').child(auth.uid).val() === true не будет проходить с пустым uid.