Meteor中是否有“私有”服务器方法?

时间:2013-09-19 06:34:13

标签: meteor

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

我从Unofficial Meteor FAQ收集到没有。我只是想检查一下是否确实如此 - 常见问题解答并不是特定的。我的意思是没有“私人”方法吗?

2 个答案:

答案 0 :(得分:17)

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

如果你想要一个'私人'方法,你可以使用普通的JavaScript方法。如果使用var定义方法,则只能在文件中访问该方法,并且无法从客户端调用该方法。

var yourmethod = function() {
    ...
}

相当于:

function yourmethod() { 
    ...
}

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

yourmethod = function() {
    ....
}

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

答案 1 :(得分:3)

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

参考: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!'));
    }
  }
});