2014-02-16 5 views
16

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

+0

Это было [задано и ответили ранее] (http://stackoverflow.com/questions/17719703/how-do-i-restrict-signup-to-a-product-in-firebase). Вкратце: используйте пользовательский логин или просто запретите чтение/запись на учетные записи, которые вы не авторизуете. – Kato

ответ

29

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

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

{ 
    ".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, эти сопоставления не будут влиять на ваше приложение, поскольку оно ограничено с помощью правил безопасности.

+0

Такой отличный ответ. Большое спасибо за Вашу помощь! – binaryorganic

+0

Я пытаюсь написать «root.child (« admins »). HasChild (auth.uid)» в Bolt. Я бы предположил, что это будет «root.admins.uid! = Null», но он преобразуется в «root.child ('admins'). Child ('uid'). Val()! = Null", а затем он not work = ( – Anders

+1

root.admins [auth.uid]! = null – mckoss

7

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

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

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

Simulation results

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

Смежные вопросы