在Firebase中将电话号码设置为主键并防止重复

时间:2019-05-07 19:22:18

标签: javascript firebase firebase-realtime-database

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()"
    }
   }
 }

enter image description here

1 个答案:

答案 0 :(得分:0)

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

jquery validation with ajax call上提供的远程访问示例