失败:流星收集拒绝访问

时间:2016-02-23 07:54:25

标签: meteor

此Meteor应用已删除不安全和自动发布,并添加了帐户密码 它使用Accounts.createUser({username: someName, password: somePwrd});,可以在mongo提示符上进行验证。

我正在尝试Tasks1.insert(params);并拒绝访问

我不知道为什么它会被拒绝更新并在浏览器控制台上插入。请告诉我为什么以及如何解决它?感谢

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

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

Meteor.methods({
  logMeIn: function(credentials) {
    var idPin = credentials[0] + credentials[1];
    Accounts.createUser({username: idPin, password: credentials[1]});
  }
});

Meteor.users.allow({
  insert: function (userId, doc) {
   console.log(userId);
   //var u = Meteor.users.findOne({_id:userId});
  return true;
}
});
/////////////////////////////////////////////////////  

//client.js
Template.login.events({
   'click #logMe': function() {
   var credentials = [$('#id').val(), $('#pin').val()];
   Meteor.call('logMeIn', credentials, function(err, result) {
    if (result) {
      console.log('logged in!');
    }
  });
 }
});
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;
       Tasks1.insert(params);  //<<<<<<----------------------
    }
  }
 }
});

2 个答案:

答案 0 :(得分:4)

<强>更新 由于您已编辑了问题并添加了Tasks1.insert(params);获取访问权限的消息,因此您应在allow集合而不是Tasks集合中添加Meteor.users规则。

Tasks.allow({
    insert: function (userId, doc) {
           return true;
        }
    }
    update: function (userId, doc, fieldNames, modifier) {
           return true;
        }
    }
    remove: function (userId, doc) {
           return true;
        }
    }
});

如果Accounts.createUserallow没有Meteor.users规则的情况下正常运行,请删除它们,因为它可能允许用户从客户端插入/删除其他人。

更新结束。

自您删除insecure后,您需要添加allow/deny规则,以便从集合中插入,更新或删除文件。

Meteor.users.allow({
    insert: function (userId, doc) {
           //Normally I would check if (this.userId) to see if the method is called by logged in user or guest
           //you can also add some checks here like user role based check etc.,
           return true;
        }
    }
    update: function (userId, doc, fieldNames, modifier) {
           //similar checks like insert
           return true;
        }
    }
    remove: function (userId, doc) {
           //similar checks like insert
           return true;
        }
    }
});

查看API documentation了解详情。

答案 1 :(得分:0)

定义像这样的Meteor.methods将为服务器和客户端定义它。这意味着您将尝试创建用户TWICE,一次在服务器上(工作的那个),另一次在客户端上。客户端无权插入用户文档,因此您收到此错误。

您有两种选择:

1:仅在服务器上定义方法if(Meteor.isServer)或将其放在名为&#34; server&#34;

的文件夹中

2:保持原样,它不会造成伤害,但会在控制台中继续显示错误。

我确信有第3个也许是第4个解决方案,但这些是我使用的两个。