Проверка подлинности с помощью пароля
Вместо того, чтобы использовать ваш метод хранения данных проверки подлинности в базе данных, используйте Вход пользователя с адресом электронной почты и паролем flow.
Тем не менее, поскольку вы используете имена пользователей, а не электронную почту, добавьте свой домен хранилища к имени пользователя (которое обычно будет PROJECT_ID.appspot.com
).
Таким образом, ваши "admin"
и "cashier"
пользователи станут "admin@PROJECT_ID.appspot.com"
и"cashier@PROJECT_ID.appspot.com"
.Ради аутентификации электронной почты это действительные адреса электронной почты, даже если они не имеют почтовых ящиков.
Затем вы можете использовать firebase.auth () в своем веб-приложении, чтобы управлять своимконтроль доступа пользователя к таким страницам, как «admin.html» и «cashier.html».
Примечание: Если вы когда-нибудь отправляете электронное письмо своим пользователям, обязательно пропустите соответствующие им письма "*@PROJECT_ID.appspot.com"
Ответ на вопрос
ВНИМАНИЕ: Не проходите аутентификацию таким образом. Пожалуйста, используйте вышеуказанный метод.
- Пароли должны никогда не должно храниться в виде простого текста
- пароли никогда не должны храниться в виде простого текста
- Пользователи не должны никогда иметь доступ к учетным данным другого пользователяв любой базе данных
Для ответа на вопрос вы можете использовать следующий код:
var database=firebase.database();
function SignIn(){
var txtuser=document.getElementById('username').value;
var txtpass=document.getElementById('password').value;
firebase.database().ref('users').orderByChild('username').equalTo(txtuser).once('value')
.then(function(snapshot) {
if (!snapshot.hasChildren()) {
throw "username not found";
} else if (snapshot.numChildren() != 1) {
throw "duplicate usernames";
}
// only one child at this point, so only called once
snapshot.forEach(function(childSnapshot) {
if (pass != childSnapshot.child('password').val()) {
throw "password mismatch";
}
var type=childSnapshot.child('type').val();
if(type=="admin") {
location.href = "admin.html";
} else if(type=="cashier") {
location.href = "cashier.html";
} else {
throw "unknown user type";
}
})
})
.catch(function(error) { // catches any errors thrown by promises
location.href = "index.html";
});
}
В приведенном выше коде каждый throw
перехватывается Promise
возвращено запросом Firebase.Вы можете прочитать о Обещаниях здесь .