8

有没有办法阻止客户端从浏览器控制台调用服务器方法?

我从非官方 Meteor 常见问题解答中收集到,没有。我只是想检查一下是否确实如此-常见问题解答并不是很具体。我的意思是没有“私人”方法吗?

4

2 回答 2

17

在流星中,由 Meteor.methods 描述的“方法”都可以从客户端调用。从这个意义上说,没有private方法,因为 RPC 调用的目的是让客户端进行调用。

如果你想要一个“私有”方法,你可以使用一个普通的 JavaScript 方法。如果用 定义方法var,则只能在文件中访问,不能从客户端调用。

var yourmethod = function() {
    ...
}

这相当于:

function yourmethod() { 
    ...
}

或者您可以定义它,以便您的任何服务器脚本都可以使用它:

yourmethod = function() {
    ....
}

如果您的意思是您想要一个只能从 javascript 代码访问的 RPC 方法调用,而不能从 chrome 中的 javascript 控制台访问,这是不可能的。这是因为流星背后的想法是所有来自客户端的 RPC 都是不可信的,并且无法区分它是否来自控制台。您可以使用流星用户身份验证或Collection.allowCollection.deny方法来防止任何未经授权的更改。

于 2013-09-19T09:22:48.720 回答
3

我通过检查 this.connection 为空来创建了一个私有方法。

参考:http ://docs.meteor.com/#/full/method_connection

前任。

Meteor.methods({
  'serverCallOnlyFunc': function() {
    if (this.connection === null) {
      //do something
    } else {
      throw(new Meteor.Error(500, 'Permission denied!'));
    }
  }
});
于 2015-09-09T09:49:40.877 回答