此Meteor应用已删除不安全和自动发布,并添加了帐户密码
meteor:PRIMARY> db.users.find({});
还显示我使用的唯一用户凭据的存在
调用Meteor.call('addTasks1',params);
会引发错误,进一步检查显示Meteor.userId()
为null
为什么这样以及如何解决?感谢
更新
根据斯蒂芬伍兹建议的解决方案;
当我将服务器上的方法addTasks1从Meteor.userId()
更改为this.userId
时,它仍会抛出错误。
///////////////////////////
// both/both.js //
///////////////////////////
Tasks1 = new Mongo.Collection('tasks1');
///////////////////////////
// client/client.js //
///////////////////////////
Template.login.events({
'click #logMe': function() {
var credentials = [$('#id').val(), $('#pin').val()];
Meteor.call('logMeIn', credentials);
}
});
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);
}
}
}
});
///////////////////////////
// server/server.js //
///////////////////////////
Meteor.methods({
logMeIn: function (credentials) {
Accounts.createUser({username: credentials[0], password: credentials[1]});
}
});
Meteor.publish('tasks1', function(){
return Tasks1.find({userId: this.userId});
});
Meteor.methods({
addTasks1: function (doc) {
if (Meteor.userId()) {
Tasks1.insert(doc);
} else {
throw new Meteor.Error("Not Authorized");
}
}
});
答案 0 :(得分:0)
您需要将用户登录,在客户端使用Meteor.loginWithPassword(<USERNAME>, <PASSWORD>)
来记录已创建的用户。
此外,您的Meteor方法addTasks1
正在服务器上执行。您希望在服务器上使用this.userId而不是Meteor.userId()。