2016-02-23 116 views
1

此流星应用程序已删除不安全和自动发布,并添加了帐户密码。
它使用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); //<<<<<<---------------------- 
    } 
    } 
} 
}); 
+0

这些文件是否也在适当的目录(服务器/客户端等)?你是否真的将用户的密码作为用户名的一部分以明文形式存储在数据库中? – MasterAM

+0

这两个问题都可以:) –

+0

server.js文件相对于项目根目录的路径是什么? – MasterAM

回答

3

更新: 既然你已经修改了你的问题,并补充说Tasks1.insert(params);越来越拒绝访问的消息,你应该Tasks集合添加allow规则,而不是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.createUser工作不allow规则上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了解更多详情。

0

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

有两个选项供您:

1:只能由if(Meteor.isServer)围绕着它或将它命名为“服务器”

2文件夹中定义服务器上的方法:离开它是,它不会造成伤害,但会继续在控制台中显示错误。

我确定有第三种解决方案,也许是第四种解决方案,但这些是我使用的两种解决方案。

+0

这个方法是在server.js里面定义的,你的意思是集合吗? –

+0

这意味着你没有告诉我们所有人......我看到你更新了这个问题,并且你得到了你的答案,所以我不会更新我的。 – Salketer

相关问题