插入仍然在Meteor.logout之后工作

时间:2016-02-23 17:09:10

标签: meteor

此Meteor应用已删除不安全和自动发布,并添加了帐户密码 它使用Accounts.createUser({username: someName, password: somePwrd});
它避免使用允许/拒绝,而是使用Meteor.call来插入文档,因为在docs中读取,它表示

  

服务器代码是受信任的,不受允许和拒绝限制。这包括使用Meteor.call调用的方法 - 它们应该进行自己的访问检查,而不是依赖于允许和拒绝。

但是当我启动Meteor.logout()时,我仍然可以向Tasks1集合插入新文档。怎么可能?我虽然注销将停止插入任何新文件。我该如何解决?感谢

///////////////////////////
//both/both.js
///////////////////////////
Tasks1 = new Mongo.Collection('tasks1');

///////////////////////////
//server/server.js
///////////////////////////
Meteor.publish('tasks1', function(){
  return Tasks1.find({userId: this.userId});
});

Meteor.methods({
  addTasks1: function (doc) {
    Tasks1.insert(doc);
  }
});

///////////////////////////
//client/client.js
///////////////////////////
Template.footer.events({
  'click button': function () {
     if ( this.text === "SUBMIT" ) {
        var inputs = document.getElementsByTagName('input');
        for (var i = 0; i < inputs.length; i++) {
          var params = {};
          params[inputs[i].name] = inputs[i].value;
          Meteor.call('addTasks1', params);
         }
      }
   }
 });

Template.mainMenu.events({
  'click #logout': function () {
    Meteor.logout();
  }  
});

2 个答案:

答案 0 :(得分:1)

在您的服务器addTasks1方法中,您应首先检查用户是否是这样的用户:

Meteor.methods({
    addTasks1: function(doc) {
        if (!Meteor.userId()) {
            throw new Meteor.Error("Not Authorized");
        } else {
            Tasks1.insert(doc);
        }

    }
})

单独退出并不能阻止用户插入。您必须编辑方法代码才能实现此目的。

答案 1 :(得分:0)

 addTasks1: function (doc) {
    if (Meteor.userId()) {
        Tasks1.insert(doc);
    }
 }