自定义Meteor方法调用客户端是否已登录

自定义Meteor方法调用客户端是否已登录,meteor,Meteor,有没有一种方法可以自定义Meteor方法,在运行所需的方法之前,Meteor方法将在继续使用该方法之前检查用户是否已登录 例: 我能行 this.userId在foo函数中进行检查,但我的观点是,如果在执行所有方法之前登录,则将检查应用于所有方法。这是一个很好的问题。在当前的API中,我认为您无法做到开箱即用。但是,您可以在将所有函数传递给Meteor.methods之前对其进行包装。如果我们这样定义requireLogin函数: var requireLogin=函数(方法){ _.每个(方法

有没有一种方法可以自定义Meteor方法,在运行所需的方法之前,Meteor方法将在继续使用该方法之前检查用户是否已登录

例:

我能行
this.userId
在foo函数中进行检查,但我的观点是,如果在执行所有方法之前登录,则将检查应用于所有方法。

这是一个很好的问题。在当前的API中,我认为您无法做到开箱即用。但是,您可以在将所有函数传递给Meteor.methods之前对其进行包装。如果我们这样定义
requireLogin
函数:

var requireLogin=函数(方法){
_.每个(方法、功能(值、键){
方法[key]=\ wrap(值,函数(){
//如果用户未登录,则无需调用该函数
如果(!this.userId)
抛出新流星。错误(401,‘您必须登录’);
//包装函数始终是第一个参数
var wrappedFunc=参数[0];
//将其他参数转换为数组
var args=arguments.length>1?Array.prototype.slice.call(arguments,1):[];
//使用参数和正确的上下文调用包装函数
返回wrappedFunc.apply(此参数为args);
});
});
返回方法;
};
然后我们可以在调用Meteor.methods之前使用
requireLogin
。例如:

流星方法(requireLogin)({ foo:函数(n){ console.log(“foo:+n”); }, 条形图:函数(n){ 控制台日志(“条:+n”); } }));
如果你想对所有的调用都这样做,你可以通过包装Meteor.methods来进一步改进它。methods本身来使用
requireLogin

我想我会坚持使用这个.userId一段时间(我正在做原型设计,所以没什么关系),我只是问这个问题,因为我将来会使用它。谢谢你的回答:)。听起来不错。我更新了答案,使其更易于重用。
Meteor.call('foo',bar,function(){}); //client.js

Meteor.methods({
//check the user if logged in here before proceeding to foo or bazz function
  'foo':function(bar)
        //logic here
  'bazz':function(fizz)
        //logic here
});