Meteor中的服务器端数据验证

Geo*_*nos 6 javascript validation backend meteor

我的客户端文件中有一个表单和一个提交函数:

function submitme () {
    var message = $('#daform').serializeJSON();
    message.owner = Meteor.user().username;
    if(!message.description || !message.location.lat || !message.location.lng || !message.mysex || !message.yoursex) {
      return;          
      }
      else
      {
          lists.insert(message);
          console.log("Submitted!");
          $('#daform')[0].reset();
      }
}
Run Code Online (Sandbox Code Playgroud)

这很好用,虽然 - 它的客户端验证=>不安全.

如何在我的服务器文件中实施"备份"验证检查?(+红利问题:如何设置计时器,以便在您提交后需要等待X秒再重新提交?)

Aks*_*hat 2

您可以使用http://docs.meteor.com/#deny(您可以使用allow,但将验证内容放在单独的deny中可能更容易),因为如果不应该插入,deny将覆盖allow:

它的作用就像在插入之前在服务器上的备份方法一样。

与您的留言收藏

服务器Js

message.deny({
    insert: function (userId, doc) {
        return (!doc.description || !doc.location.lat || !doc.location.lng || !doc.mysex || !doc.yoursex);
    },
    update: function (userId, docs, fields, modifier) {
        return (!doc.description || !doc.location.lat || !doc.location.lng || !doc.mysex || !doc.yoursex);
    }
);
Run Code Online (Sandbox Code Playgroud)

注意:deny 返回 false 表示不拒绝。要拒绝更新,您必须返回 true。

  • 仅供参考 `collection.deny` **不验证服务器端写入**。但它确实安全地验证了客户端写入,这满足了问题,但可能会产生误导。https://gist.github.com/colllin/adf4626cc3e38391e5f7 (2认同)