我有一些Meteor methods并且我想保护它们,以便只有某些用户可以从客户端调用它们。但是,服务器也使用这些方法。我在this.userid中传递了userid,因此我可以检查用户是否已登录,是否允许他们拨打电话,没问题。但是,当我还需要从服务器端调用该方法时,如何确定它是服务器调用,以便我可以允许该方法执行。检查没有this.userid确定其服务器调用是否允许未经过身份验证的用户也调用该方法。我正在寻找一种方法来确定该方法是否被服务器调用,以便我可以允许它并仍然阻止未经过身份验证的用户调用该方法。
Meteor.methods({
makeCoffee: function (time) {
check(time, Number);
if(calledByServer || (Meteor.user() && Meteor.user().profile.usertype === 'coffee dude')){
//Makin' Coffee
}
else
throw new Meteor.Error(404, "Can't find my pants");
return "Coffee will be made at " + time;
}
答案 0 :(得分:13)
this.connection
将在服务器端方法中null
答案 1 :(得分:4)
现在看来Meteor.call也可以从服务器端调用: http://docs.meteor.com/#meteor_call
原始回答:
像这样:
makeCoffee = function (time) { //code here }
Meteor.methods({
makeCoffeeMethod: function (time) {
if (calledByAllowedUser())
return makeCoffee(time);
else
throw new Meteor.Error(403, 'Forbidden');
}
});
现在您可以绕过身份验证在服务器上调用它。