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