Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
firebase更复杂的验证_Firebase - Fatal编程技术网

firebase更复杂的验证

firebase更复杂的验证,firebase,Firebase,我正在创建一个以firebase后端作为API的angular应用程序 人们可以在日历上预约,但两个人不能共享同一时段。此外,由于预约可以每半小时开始一次,检查变得有点复杂 我可以让firebase执行更复杂的验证吗?它几乎涵盖了我需要的所有其他东西,我不喜欢创建自定义的东西,只是因为这个特性 谢谢 据我所知,使用Firebase是可能的。但是,Firebase不像Mongo那样具有动态查询功能。我相信你必须采取相当原始的方法来解决这个问题,比如: db.child('calendar').on

我正在创建一个以firebase后端作为API的angular应用程序

人们可以在日历上预约,但两个人不能共享同一时段。此外,由于预约可以每半小时开始一次,检查变得有点复杂

我可以让firebase执行更复杂的验证吗?它几乎涵盖了我需要的所有其他东西,我不喜欢创建自定义的东西,只是因为这个特性


谢谢

据我所知,使用Firebase是可能的。但是,Firebase不像Mongo那样具有动态查询功能。我相信你必须采取相当原始的方法来解决这个问题,比如:

db.child('calendar').once('value', function(snapshot){
  var hours = snapshot.val();
  // for each hour
    // do validation here
})

如果我是对的,你说你不想做客户端检查。听起来不错。下面是我要做的:

在存储约会时,我会根据他们的时间给他们命名。客户端代码:

var dataRef = new Firebase('https://example.firebaseio.com/');
dataRef.child('2014-6-9-0500').set('name'); // 5:00 6/9/2014 converted to a string
因此,所有约会都将根据时间命名,其值将等于当时被安排的人的姓名。这将导致无法同时安排两个人(因为在Firebase中,不能有两个同名的孩子)

在安全选项卡中,检查数据是否不存在(以防止过度写入现有约会)。然后,对于验证,您可以检查约会时间,并确保它以“00”或“30”结尾,长度为12位。规则应该是这样的:

"rules": {
  ".read": true,

  "$time": {
    ".write": "!data.exists()",
    ".validate": "$time.endsWith('00') || $time.endsWith('30')"
  }
}
虽然可以接受非有效时间(例如“0000-0-0-0030”或甚至“qt00”),但提交的有效约会不会与另一个约会安排在同一时间,约会将在“:00”或“:30”(半小时间隔)结束


唯一的问题是,如果一个人从中午开始有一个小时的约会。你必须安排多个约会:一个在12:00,另一个在12:30。这可能会有点烦人,但我不知道还有什么其他方法可以做到。

你试过什么吗?如果我理解得很好,您只需在Firebase中保存一个值(例如约会时间),然后在用户尝试保存时检查相同的值,就可以实现这一点。所有东西都有几行前端代码。你能提供一个到目前为止你尝试过的例子吗?这需要一本书的章节来描述所有的可能性,而不需要更多关于用例的细节。我还没有尝试过任何东西。约会存储为带有开始和完成日期的JavaScript对象。基本上是在前端,当有人试图预订某件东西时,我会确保开始或结束不在另一个约会范围内。我想在后端有一张类似的支票……我不想把支票只放在前端——这就是问题所在。你好,肖恩,谢谢你的回答!通过阅读安全API,我找不到“db”。或者。有一次,我在文档中遗漏了什么吗?另外,我想你建议将其置于“验证”下?谢谢,这听起来不错,但它仍然保留了客户端的验证,这是我想要避免的…非常感谢Timothy,我也想到了类似的事情:)