此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); //<<<<<<----------------------
}
}
}
});
答案 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.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了解详情。
答案 1 :(得分:0)
定义像这样的Meteor.methods将为服务器和客户端定义它。这意味着您将尝试创建用户TWICE,一次在服务器上(工作的那个),另一次在客户端上。客户端无权插入用户文档,因此您收到此错误。
您有两种选择:
1:仅在服务器上定义方法if(Meteor.isServer)
或将其放在名为&#34; server&#34;
2:保持原样,它不会造成伤害,但会在控制台中继续显示错误。
我确信有第3个也许是第4个解决方案,但这些是我使用的两个。