Я хочу разрешить пользователям входить в систему только в том случае, если userIsArtist = true
.
Вы не можете запретить пользователю вход в систему на основе указанного значения c, но вы можете запретить ему получить вашу базу данных. Для этого вам нужно написать Правило безопасности , которое разрешает / запрещает доступ на основе этих данных.
Что-то вроде следующих строк:
".read": "auth.uid != null && root.child('users/' + auth.uid + '/userIsArtist').val() === true"
Параллельно, в ваш интерфейс, после входа в систему вы можете выйти из системы и перенаправить пользователя на страницу входа в систему, если он / она не разрешены.
Что-то вроде следующего, где после входа мы получаем базу данных в реальном времени на основе uid пользователя:
auth.signInWithEmailAndPassword(email.value, password.value)
.then(userCredential => {
const userId = userCredential.user.uid;
return firebase.database().ref('/users/' + userId).once('value')
})
.then(snapshot => {
var userIsArtist = snapshot.val().userIsArtist;
if (!userIsArtist) {
//Redirect to login or other action or message
}
});
Однако в этом конкретном случае c (право доступа на основе ролей) рекомендуется использовать настраиваемые утверждения. См. Следующие элементы документации:
Обратите внимание, что вы можете получить доступ к настраиваемому утверждению из внешнего интерфейса и, как и в приведенном выше решении, вы можете перенаправить пользователя, у которого нет настраиваемого утверждения userIsArtist
.
Также обратите внимание, что использование настраиваемого утверждения в правиле безопасности отличается от приведенного выше примера базы данных реального времени. См. Do c (ссылка во втором пункте выше).
Наконец, обратите внимание, что одним из преимуществ использования настраиваемого утверждения над указанным выше решением является то, что вы можете использовать его в правилах безопасности других Сервисы Firebase, например Облачное хранилище.