如果请求主体不包含模型中的所有内容 - 拒绝||火力

时间:2018-01-08 20:42:44

标签: javascript firebase

只是想问一下,如何处理firebase的情况,让我们说,一些棘手的用户避免我的客户端验证并提交一个表格,其中不包含模型中的少数元素,让我们说模型是:

const userProps = {
   name: string,
   surname: string,
   age: number,
}

并且用户提交仅包含:

的对象
... = {
   name: 'Mark',
   age: 50,
}

甚至他提交了所有内容,但提交的内容错误,例如:

... = {
   name: 1234,
   surname: true,
   age: 'hey',
}

如何告诉firebase这个指定的数据库必须是由具有确切类型的元素作为模型userProps

感谢:!)

2 个答案:

答案 0 :(得分:1)

您可以使用database rules

执行此操作

以下是您执行架构的方式:

{
  "rules": {
    ".read": "true",
    "users": {
      "$uid": {
        ".write": "true",
        ".validate": "newData.child('name').isString() && newData.child('surname').isString() && newData.child('age').isNumber()"
      }
    }
  }
}

这允许任何人阅读任何内容,但对/users的写入必须包含namesurnameage以及正确的类型。由于write仅为users定义,因此无法写入数据库中的其他路径。 (您可以在write键下设置rules以在任何地方启用写入。

(如果您使用Firebase CLI设置数据库,Firebase将部署规则。)

数据库规则可以强制执行相当复杂的模式,因此请务必阅读文档!

答案 1 :(得分:1)

使用安全规则。如果您使用的是实时数据库,请参阅here;对于Cloud Firestore,请参阅here。实时数据库的一个示例:

{
  "users": {
    "$uid": {
      ".validate": "newData.child('name').isString() && newData.child('surname').isString() && newData.child('age').isNumber()"
    }
  }
}