javascript - 在 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()"
}
}
}
解决方案
我建议不要使用电话号码作为主键。将其用作唯一值。似乎您正在使用 jquery.validate 插件,因此您可以访问远程并查看您的数据库以验证重复号码.. 否则。在您的脚本中.. 在您的 saveMessage 函数之前。调用 ajax 来查看数据库。如果该号码存在,请阻止提交您的表单并提醒消息该号码已存在。
使用 ajax 调用进行 jquery 验证时可用的远程访问示例
推荐阅读
- android - 使用 Moshi 和 Retrofit 解析动态字符串对象
- typescript - 根据参数区分返回类型
- c - c语言中')'标记之前的预期主表达式
- javascript - React Bootstrap Form Control-无法调整表格行中的高度
- xamarin.ios - 如何从 Xamarin.iOS 中的 SceneDepth 数据中获取距离?
- machine-learning - 图像数据生成器方法 flow_from_directory 中的颜色模式
- laravel - 当我传递值 Laravel 时,CSS、JS 不显示
- reactjs - 在功能组件中使用 ref - 这是正确的方法吗?
- django - Django GraphQL 测试图像
- python - Seaborn 的 relplot 给出了 ValueError