让我们假设一个人使用表单来更新集合中的文档 .
通常,在提交后,可以使用某种类型的表单验证过程来验证表单中字段的完整性 . 然后在数据验证之后,假设数据被传递给meteor方法以实际更新集合 .
但理论上,用户可以使用javascript控制台来构建对同一更新方法的流星调用 . 出于安全考虑,为了验证通过控制台提交的内容,这是否意味着必须在方法中验证字段的完整性?
因此,对于通过表单的正常提交案例,这将导致相同的字段被验证两次(一次在表单验证期间,一次在方法内) .
是否有一种优雅的方法来绕过冗余验证,或者所有方法都必须有冗余的现场验证步骤?
1 回答
您应该考虑使用aldeed:collection2来验证集合的更新 . 通常,您在/ lib中定义架构,然后在客户端和服务器上验证更新,但您只需编写一次代码 . 如果您想避免双重工作,那么只能在服务器上进行验证,因为您无法信任客户端 . 建议不要这样做,因为客户端验证的成本由您的用户承担,而不是您的服务器承担 . 如果在输入字段时验证字段而不是onSubmit,则可以创建更好的UX,因为您将更早地提供用户反馈 .
我的基本验证方法:
更改事件
change(){}
上每个表单字段上的事件处理程序 . 这样做可以使字段边框为绿色表示有效条目,红色X表示无效条目 .Collection2验证客户端上的文档插入/更新
方法验证他们的参数
Collection2验证服务器上的文档插入/更新
更多阅读:
http://0rocketscience.blogspot.com/2015/07/meteor-security-no-2-all-praise-aldeed.html
http://0rocketscience.blogspot.com/2015/12/meteor-security-no-4-extending-match.html