Вход в Firebase через Интернет, проверка настраиваемого значения - PullRequest
0 голосов
/ 29 мая 2020

У меня есть функция входа на мой веб-сайт:

function signIn(){

        var email = document.getElementById("txtEmail");
    var password = document.getElementById("txtPassword");


        const promise = auth.signInWithEmailAndPassword(email.value, password.value);
        promise.catch(e => console.log(e.message));
        promise.then(() => {
            window.location.replace("main.html");
        });
    }

Теперь, когда кто-то создает учетную запись, я устанавливаю пользовательское значение, которое является логическим:

isArtist = false;

Теперь то, что я хочу, это при попытке зарегистрироваться, проверить, является ли isArtist ложным или нет. Как это сделать?

РЕДАКТИРОВАТЬ:

моя функция регистрации:

  function signUp(){

    var userArtistName = document.getElementById("userArtistName").value;
    var userEmail = document.getElementById("userEmail").value;
    var userPassword = document.getElementById("userPassword").value;

        firebase.auth().createUserWithEmailAndPassword(userEmail, userPassword).then((success) => {
            var user = firebase.auth().currentUser;
            var uid;
            if (user != null) {
                uid = user.uid;
            }
            var firebaseRef = firebase.database().ref();
            var userData = {
                userArtistName: userArtistName,
                userEmail: userEmail,
                userIsArtist: true,
                userId: uid,
            }
            firebaseRef.child('users/' + uid).set(userData);
            console.log('User successfully created!');
           // code for replace user
        }).catch((error) => {
            // Handle Errors here.
            var errorCode = error.code;
            var errorMessage = error.message;
        });
    }

И это моя структура базы данных:

enter image description here

1 Ответ

1 голос
/ 29 мая 2020

Я хочу разрешить пользователям входить в систему только в том случае, если 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, например Облачное хранилище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...