我最近开始尝试meteor的auth
分支,并根据我调用调用this.userId()的meteor方法,它将返回null或我需要的用户ID。
更具体一点,当我从meteor.startup内部初始化的coffeescript类调用meteor方法时,它可以正常工作,但不是从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补丁!
答案 0 :(得分:3)
您应该使用Meteor.userId()
在Meteor.methods
中检索当前用户的ID。 :)
答案 1 :(得分:1)
这可能是愚蠢的:但是,你是否登录?(抱歉,这最终是我的问题。)
如果登录,最好先检查一下:
if (this.userId)
console.log(this.userId)
答案 2 :(得分:0)
this.userId()
本身并不是被动的,所以如果你想让其他事情做出反应,你需要将它放在Session
变量中。所以,从Meteor.startup
开始:
Session.set('userId', this.userId());
然后,在您需要的地方,您可以使用它:
Session.Get('userId');
这样,当它丢失时,null
将在稍后填写。
答案 3 :(得分:0)
这对我有用。您确定正确获得Meteor.call
的返回值吗?类似的东西:
Meteor.call 'get_user_id', (error, result) -> console.log(result)
如果在方法中添加console.log(@userId())
会怎样?