如何防止Firebase实时数据库、Web和JavaScript的数据重复

如何防止Firebase实时数据库、Web和JavaScript的数据重复,javascript,firebase,web,firebase-realtime-database,firebase-security,Javascript,Firebase,Web,Firebase Realtime Database,Firebase Security,这是我为用户提供的数据库结构 如图所示,有两个相同的识别号成功注册 如何防止“ICNumber”(识别号)被多次注册 这是我的实时数据库中的规则: 我试着写下这段代码,但似乎不起作用。在我的Javascript中,或者在我的Firebase规则中,是否有任何正确的方法可以进行预防?在您的代码中,您可以执行以下操作: // Get a reference to the database service var database = firebase.database(); var dataRe

这是我为用户提供的数据库结构

如图所示,有两个相同的识别号成功注册

如何防止“ICNumber”(识别号)被多次注册

这是我的实时数据库中的规则:


我试着写下这段代码,但似乎不起作用。在我的Javascript中,或者在我的Firebase规则中,是否有任何正确的方法可以进行预防?

在您的代码中,您可以执行以下操作:

// Get a reference to the database service
var database = firebase.database();
var dataRetrieved = database.ref('users').child(userId).orderByChild("ICNumber").equalTo("000326141809");
dataRetrieved.on('value', function(snapshot) {
  if(snapshot.exists()){
     // do the required
   }
});

您可以使用
query
检查
ICNumber
是否等于
000326141809
,然后使用方法
exists()
检查它是否已经存在于数据库中

在JSON结构中没有可靠的方法来防止重复值,就像现在的JSON结构一样。它将要求安全规则扫描所有节点,这无法扩展。确保Firebase中的某些内容唯一的方法是将这些值用作JSON中的键。请参阅、并理解。链接确实很有帮助!谢谢@弗兰克万帕夫兰太感谢你了!您的代码工作正常,它会检测该值是否已存在于数据库中。但是,代码仍然运行我的signup()函数。你有什么解决办法吗?我尝试过:break、return和preventDefault语句,但它们似乎不起作用——只需在else中编写注册并使用一次,而不是使用一个正确的语句!谢谢你的帮助!