9

我有一些Meteor 方法,我想保护它们,以便只有某些用户可以从客户端调用它们。但是,服务器也使用这些方法。我在 this.userid 中传递了用户 ID,因此我可以检查用户是否已登录以及是否允许他们拨打电话,没问题。但是当我还需要从服务器端调用该方法时,我如何确定它是一个服务器调用,以便我可以允许该方法执行。检查是否存在 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;
  }
4

2 回答 2

14

this.connection如果该方法不是从客户端调用的,则将null位于服务器端方法中

请参阅this.connection 文档

于 2014-10-05T19:52:19.333 回答
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');
  }
});

现在您可以绕过身份验证在服务器上调用它。

于 2013-08-08T03:11:04.750 回答