Как использовать запрос firestore для выполнения входа на основе роли пользователя для javascript - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь создать логин, используя javascript и firestore в качестве внутренних функций. Кажется, мой код не выполняет запрос, и идентификатор пользователя, заданный firebase, не вынимается из облака. мой текущий код просто перенаправляет любого пользователя на PatientDashboard. php независимо от его 'занятия'

Вот мой код

(function(){//initialize the firebase app
    var config = {

        }; 

        firebase.initializeApp(config);
        var auth = null;
        var loginBtn= document.getElementById('btnLogin');
        // var user = db.collection("users");
        // var db = firebase.firestore();
        firebase.auth.Auth.Persistence.SESSION;

    //Login
    loginBtn.addEventListener('click', async e => {
        e.preventDefault();
        if( $('#email').val() != '' && $('#password').val() != '' ){
        //login the user
        var data = {
            email: $('#email').val(),
            password: $('#password').val()
        };
        try{
            const userCredential = await firebase.auth().signInWithEmailAndPassword(data.email, data.password);
            let uid = userCredential.user.uid;
            var documents = await firebase.firestore().collection("users").doc(uid);
            documents.get().then(function(doc){
                if(doc.data['occupation'] != 'Doctor'){
                    window.location.href = "patientDashboard.php"; 
                }
                else {
                    window.location.href = "doctorDashboard.php";  
                }                  
            });
        }    
        catch(err){
            console.log("Login Failed!", err);
            window.alert("Login Failed!", err);
        }
    }
});
})();

что я хочу сделать sh правильная бэкэнд-функция входа в систему, основанная на профессии пользователя. Но на данный момент он только перенаправляет на вышеупомянутую страницу. Я подозреваю, что виновником является код запроса, который я сделал ..

1 Ответ

1 голос
/ 29 января 2020

Вы не можете сделать doc.data['occupation'].

Вам нужно либо использовать data() метод следующим образом:

if(doc.data().occupation != 'Doctor') {...}

или используйте метод get() следующим образом:

if(doc.get('occupation') != 'Doctor') {...}

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

Кроме того, в вашем коде есть еще одна ошибка. Вы путаете использование async/await и then() метода. Вы должны адаптировать свой код следующим образом

    var document = await firebase.firestore().collection("users").doc(uid).get();

    //document is a DocumentSnapshot, we can call the get() method

    if (document.get('occupation') != 'Doctor'){
       window.location.href = "patientDashboard.php"; 
    }
    else {
       window.location.href = "doctorDashboard.php";  
    }  

Имейте в виду, что с этим кодом вы НЕ внедряете подлинную систему контроля доступа на основе ролей. Вы просто перенаправляете пользователя на основании значения в его user документе. Кто-то может легко перепроектировать ваше приложение и перенаправить на неправильную страницу.

Если вы хотите настроить систему контроля доступа на основе ролей, вас может заинтересовать эта статья , которая показывает, как делать с пользовательскими претензиями. ( отказ от ответственности, я автор )

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