хотите сопоставить адрес электронной почты и пароль из базы данных firestore в js

# #javascript #firebase #validation #google-cloud-firestore #firebase-authentication

Вопрос:

Электронная почта и пароль находятся в firestore, который поступает из приложения, моя задача-создать панель администратора в js, и в этой панели администратора есть страница входа, всякий раз, когда кто-то вводит туда электронную почту и пароль, моя задача-проверить электронную почту и пароль, если они совпадают с электронной почтой и паролем электронной почты и пароля firestore, затем покажите ему/ей панель администратора, в противном случае отобразите всплывающее окно, в котором вы не аутентифицированы.

вот фотография базы данных firestore, где у меня есть электронная почта и пароль, поступающие из приложения

form.html

 <!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Form</title>
    <meta content='width=device-width, initial-scale=1.0, shrink-to-fit=no' name='viewport' />
    <!--     Fonts and icons     -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
        integrity="sha384-ggOyR0iXCbMQv3Xipma34MD dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <script src="https://www.gstatic.com/firebasejs/8.3.3/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.3.3/firebase-firestore.js"></script>
    <!-- TODO: Add SDKs for Firebase products that you want to use
     https://firebase.google.com/docs/web/setup#available-libraries -->
    <script src="https://www.gstatic.com/firebasejs/8.3.3/firebase-analytics.js"></script>

    <link rel="stylesheet" type="text/css" href="form.css">
</head>

<body>
    <div class="container">
        <div class="row">
            <div class="col-lg-3 col-md-2"></div>
            <div class="col-lg-6 col-md-8 login-box">
                <div class="col-lg-12 ">
                </div>
                <div class="col-lg-12 login-title">
                    ADMIN PANEL
                </div>

                <div class="col-lg-12 login-form">
                    <div class="col-lg-12 login-form">
                        <form>
                            <div class="form-group">
                                <label class="form-control-label">EMAIL</label>
                                <input type="text" class="form-control email" name="email" id="email"  >
                            </div>

                            <div class="form-group">
                                <label class="form-control-label">COMPANY NAME</label>
                                <input type="text" class="form-control" name="companyname"  id="companyname">
                            </div>

                            <div class="form-group">
                                <label class="form-control-label">PASSWORD</label>
                                <input type="password" class="form-control" name="password" id="password"  >
                            </div>

                            <div class="col-lg-12 loginbttm">
                                <div class="col-lg-6 login-btm login-text">

                                </div>
                                <div class="col-lg-6 login-btm login-button" style='float: right'>
                                    <button class="btn btn-outline-primary" onclick="login()">LOGIN</button>
                                </div>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
        <script src="from.js"></script>

        <script>
            // Your web app's Firebase configuration
            // For Firebase JS SDK v7.20.0 and later, measurementId is optional
            var firebaseConfig = {
                apiKey: "AIzaSyCBFPUeRkDtvB9oUYHKH18co6n8sVkktd0",
                authDomain: "insurance-app-515f9.firebaseapp.com",
                projectId: "insurance-app-515f9",
                storageBucket: "insurance-app-515f9.appspot.com",
                messagingSenderId: "507922592990",
                appId: "1:507922592990:web:6ab80539593fc46ea43e4f",
                measurementId: "G-85KC0RZSV8"
            };
            // Initialize Firebase
            firebase.initializeApp(firebaseConfig);
            firebase.analytics();
            const db = firebase.firestore();
            db.setting({ timestampsInSnapshots: true });
        </script>

        <script src="../assets/js/plugins/sweetalert2.js"></script>



</body>

</html>
 

form.js

 function login() {
// var getId=localStorage.getItem("getId");
var useremail = document.getElementById("email").value;   
var companyname = document.getElementById("companyname").value;
var password = document.getElementById("password").value;


db.collection('Companies List').where("CompanyEmail", "==", useremail, "CompanyPassword", "==", password);
Swal.fire({
    title:'Match!',
    text: 'Welcome to the dashboard',
    type: 'success',
      }).then(function() {
  window.location = "dashboard.html";
  });

}
 

Ответ №1:

Ваш запрос, по-видимому, соответствует вашим требованиям. Вам просто нужно проверить, соответствует ли какой-либо документ данным, предоставленным пользователем. Это можно сделать, проверив, является ли возвращенный снимок пустым или содержит соответствующий документ

 const docRef = db.collection('Companies List')
   .where("CompanyEmail", "==", useremail)
   .where("CompanyPassword", "==", password);
// ^ separate .where()

docRef.get().then((snapshot) => {
  if (snapshot.empty) {
    // no docs matched
    console.log("Invalid Credentials")
  } else {
    console.log(snapshot.docs[0].data())
    Swal.fire({
      title:'Match!',
      text: 'Welcome to the dashboard',
      type: 'success',
    }).then(function() {
      window.location = "dashboard.html";
    });
  }
})
 

Просто обратите внимание, что в идеале вам следует избегать использования Firestore или любой базы данных напрямую для аутентификации. Вы можете войти в систему пользователей с помощью аутентификации Firebase, а затем сохранить идентификаторы пользователей в соответствующем документе компании.

Комментарии:

1. Сэр, большое вам спасибо, что это сработало. не могли бы вы, пожалуйста, рассказать мне, как отправить метку времени в firestore с помощью кнопки?

2. @saqibdiar это звучит как отдельный вопрос, и для этого вам следует задать новый.

3. @Dharmaraj Вам действительно следует добавить правила безопасности, соответствующие вашему текущему коду запроса, или подчеркнуть, что этот «ответ» никогда не следует использовать , и это создает огромную дыру в безопасности, потому что любой может прийти и просто запустить firebase.firestore().collection("Companies List").get().then(qs => qs.docs.map(doc => [doc.get("CompanyEmail"), doc.get("CompanyPassword")])).then(console.dir) утечку учетных данных каждого администратора (что, вероятно, они использовали этот пароль в другом месте).

4. Спасибо за предложение @samthecodingman. Я обновлю ответ как можно скорее.