12

第一个插入工作正常,但第二个在控制台中给出“插入失败:403 - 访问被拒绝”。自动订阅已启用,我在 auth 分支上。如何设置我的代码,以便我有一个客户端可以写入的服务器 MongoDB?

People = new Meteor.Collection('people'); 

if (Meteor.is_server) {
People.insert({name: 'Bob'});
}
if (Meteor.is_client) {
People.insert({name: 'Bob'});
}
4

4 回答 4

21

因为您正在使用 auth,所以您必须允许或拒绝尝试执行插入、更新、删除和提取的客户端。要解决此特定问题,您必须添加 Collection.allow() 以让客户端的插入工作。

if(Meteor.is_server) {

  People.allow({
    'insert': function (userId,doc) {
      /* user and doc checks ,
      return true to allow insert */
      return true; 
    }
  });

}
于 2012-10-09T00:02:54.407 回答
8

在 Collection People 中使用方法 allow()。此方法分配访问 CRUD。

function adminUser(userId) {
  var adminUser = Meteor.users.findOne({username:"admin"});
  return (userId && adminUser && userId === adminUser._id);
}
Lugares.allow({
  insert: function(userId, lugar){
    return adminUser(userId);
  },
  update: function(userId, lugares, fields, modifier){
    return adminUser(userId);
  },
  remove: function (userId, docs){
    return adminUser(userId);
  }
});
于 2013-07-16T12:09:47.833 回答
3

从项目中删除不安全的包后,我遇到了这个错误。

meteor remove insecure

以下解决了我的问题。

Posts = new Meteor.Collection('posts');

Posts.allow({
  insert: function(userId, doc) {
    // only allow posting if you are logged in
    return !! userId;
  }
});
于 2015-11-18T19:23:34.113 回答
2

如果你只有 simple-todos 教程之类的测试项目,你可以通过添加不安全的包来解决它

meteor add insecure
于 2016-08-20T13:29:40.547 回答