首页 > 解决方案 > 在 Firebase 中将电话号码设置为主键并防止重复

问题描述

对 firebase 来说是全新的,我想将电话号码设置为主键 (uid),将电子邮件设置为辅助键。如果它们存在于我的 firebase 数据库中,如何防止这两个重复?我的应用程序中没有任何身份验证。我这样做是为了联系表格以防止重复

下面是我的 JS 代码

 // Submit form
function submitForm(e){
  e.preventDefault();

  // Get values
  var name = getInputVal('name');
  var company = getInputVal('company');
  var email = getInputVal('email');
  var phone = getInputVal('phone');
  var message = getInputVal('message');

  // Save message
  saveMessage(name, company, email, phone, message);
}

// Function to get get form values
function getInputVal(id){
  return document.getElementById(id).value;
}

// Save message to firebase
function saveMessage(name, company, email, phone, message){
  var newMessageRef = messagesRef.push();
  newMessageRef.set({
    name: name,
    company:company,
    email:email,
    phone:phone,
    message:message
  });
}

以下是我在firebase中设置的规则

{

 "rules": {
    ".read": "false",
    ".write": true,
    "phone": {  // assuming this as primary key
      ".validate": "newData.isString() && 
        newData.val().length == 10 &&
        !root.child('phone').child(newData.val()).exists()"
    }
   }
 }

在此处输入图像描述

标签: javascriptfirebasefirebase-realtime-database

解决方案


我建议不要使用电话号码作为主键。将其用作唯一值。似乎您正在使用 jquery.validate 插件,因此您可以访问远程并查看您的数据库以验证重复号码.. 否则。在您的脚本中.. 在您的 saveMessage 函数之前。调用 ajax 来查看数据库。如果该号码存在,请阻止提交您的表单并提醒消息该号码已存在。

使用 ajax 调用进行 jquery 验证时可用的远程访问示例


推荐阅读