3

我最近开始尝试auth流星的分支,根据我调用 this.userId() 的流星方法的位置,它将返回 null 或我需要的用户 ID。

更具体地说,当从 Meteor.startup 内部初始化的咖啡脚本类调用我的流星方法时,它可以工作,但当从 Meteor.publish 内部调用相同的方法时则不行

流星方法很简单,可能不相关,但以防万一:

Meteor.methods(
  get_user_id: ->
    return @userId()
)

编辑:似乎人们无法重现我的问题,这里是 todo auth 示例的一个补丁,应该演示它。

    diff --git a/examples/todos/server/methods.js b/examples/todos/server/methods.js
    index e69de29..d4182a6 100644
    --- a/examples/todos/server/methods.js
    +++ b/examples/todos/server/methods.js
    @@ -0,0 +1,6 @@
    +Meteor.methods({
    +  get_user_id: function() {
    +    console.log(this.userId());
    +    return this.userId();
    +  }
    +});
    diff --git a/examples/todos/server/publish.js b/examples/todos/server/publish.js
    index 1552c5e..87cb29f 100644
    --- a/examples/todos/server/publish.js
    +++ b/examples/todos/server/publish.js
    @@ -16,6 +16,8 @@ Todos = new Meteor.Collection("todos");

     // Publish visible items for requested list_id.
     Meteor.publish('todos', function (list_id) {
    +  Meteor.call('get_user_id');
    +  //console.log(this.userId())
       return Todos.find({
         list_id: list_id,
         privateTo: {

感谢Eitan的补丁!

4

4 回答 4

3

You should use Meteor.userId() to retrieve the current user's ID within Meteor.methods. :)

于 2014-02-13T17:27:58.953 回答
1

这可能很愚蠢:但是,您登录了吗?(对不起,这终于是我的问题了。)


所以最好先检查是否登录:

if (this.userId)
    console.log(this.userId)
于 2013-01-15T18:57:11.077 回答
0

this.userId()据我所知,它本身没有反应,所以如果你想让其他东西对它做出反应,你需要把它放在一个Session变量中。所以,从Meteor.startup你做:

Session.set('userId', this.userId());

然后,您可以在需要的地方使用它:

Session.Get('userId');

这样,当它丢失时,null它将在以后填充。

于 2012-06-24T19:11:42.973 回答
0

它对我有用。你确定你得到了Meteor.call正确的返回值吗?就像是:

Meteor.call 'get_user_id', (error, result) -> console.log(result)

如果你console.log(@userId())在你的方法中添加会发生什么?

于 2012-06-25T05:37:55.023 回答