如何使用JavaScript在Firestore中按公司名称筛选查询对应请求数据
实现方案
第一步:修改登录逻辑,存储当前登录企业标识
你需要在登录校验通过后,把当前登录的企业名称持久化存储(保证跳转到home1.html后还能正常读取),同时建议补充企业名称的校验,避免出现邮箱密码正确但企业名称不匹配的异常情况。
修改后的登录代码如下:
function login() { var useremail = document.getElementById("email").value; var inputCompanyName = document.getElementById("CompanyName").value; var password = document.getElementById("password").value; const docRef = db.collection('Companies List') .where("CompanyEmail", "==", useremail) .where("CompanyPassword", "==", password) // 补充校验提交的企业名称和账号匹配 .where("CompanyName", "==", inputCompanyName); docRef.get().then((snapshot) => { if (snapshot.empty) { alert("Invalid Credentials") } else { const loginCompanyData = snapshot.docs[0].data(); Swal.fire({ title:'Match!', text: 'Welcome to the dashboard', type: 'success', }).then(function() { // 把登录的企业名称存到sessionStorage,页面跳转后依然可读取 sessionStorage.setItem('loginCompanyName', loginCompanyData.CompanyName); window.location = "home1.html"; }); } }); }
第二步:修改home1.html的请求拉取逻辑,添加筛选条件
找到你之前全量拉取请求列表的代码,添加where筛选条件,匹配PolicyCompany字段和存储的登录企业名称即可,示例如下:
// 从sessionStorage读取当前登录的企业名称 const currentCompany = sessionStorage.getItem('loginCompanyName'); // 未登录时直接跳回登录页 if (!currentCompany) { window.location = 'login.html'; } // 拉取数据时添加筛选,仅拉取当前企业的请求 db.collection('你的请求列表集合名') .where('PolicyCompany', '==', currentCompany) .get() .then((snapshot) => { // 你的原有渲染逻辑不变,直接处理snapshot里的文档即可 snapshot.docs.forEach(doc => { console.log(doc.data()); // 原有渲染到HTML表单的逻辑 }) })
补充注意点
- 如果你需要关闭浏览器后登录状态依然保留,可以把
sessionStorage换成localStorage - 生产环境建议给Firestore配置安全规则,禁止企业读取其他企业的请求数据,避免前端篡改存储值越权访问
内容的提问来源于stack exchange,提问作者saqib diar
相关产品推荐
相关产品推荐

