coffeescript
  • meteor
  • meteorite
  • 2013-04-09 76 views 3 likes 
    3

    我想根据用户的角色有选择地发布用户数据。我想要发布电子邮件地址和用户名。如果用户是管理员,他们应该能够看到整个用户配置文件。流星发布额外的用户信息登录/注销

    在服务器(CS):

    Meteor.publish "allUsers", -> 
        if Roles.userIsInRole @userId, 'admin' then data = profile: 1 
        else data = 'profile.name': 1 
        data['emails.address'] = 1 
        Meteor.users.find {}, fields: data 
    

    在客户端(CS):

    Meteor.subscribe("allUsers") 
    

    这个伟大的工程的大部分时间。当用户注销,然后重新登录,东西坏了与订阅和

    Meteor.user().profile 
    

    回报什么。刷新页面,并重新填写配置文件字段。为了解决这个问题,我将服务器返回语句更改为:

    [ 
        Meteor.users.find {}, fields: data 
        Meteor.users.find @userId 
    ] 
    

    这没有做什么。这是流星的错误还是我从根本上误解了登录/注销?

    更新

    我读了一点,似乎流星会随机选择多个订阅数据放在同一个收集/发表。考虑到这一点,我将返回查询更改为:

    Meteor.users.find _id: $ne: @userId, fields: data 
    

    来自其他用户的数据现在不会被发布! (Meteor.users.find()。count()在控制台返回1.)

    回答

    0

    我相信你原来的返回声明是好的。不过,我会看Roles.userIsInRole函数会发生什么,@userIdnull。也许有一个错误导致发布功能崩溃。

    我不是一个Coffeescripter,但如果是这样的问题,那么我认为你的加入发布功能此之上将解决您的问题:

    if not @userId return 
    
    +0

    的发布功能不崩溃。当userId为null时发生的所有情况是Roles.userIsInRole返回undefined,这意味着else语句被命中。这并不能解决问题 - 匿名用户应该仍然可以访问这些信息。如果没有userId返回将意味着不会发生。即使我知道这不起作用,我检查:注销,然后再次登录(如预测)仍然留下配置文件字段未填充。感谢您的尝试。 – cazgp 2013-04-09 15:25:52

    +0

    啊好吧,是的,我不确定你是否想要匿名用户获得该信息。在调用Meteor.users.find()之前,我会记录_data_的值。如果您没有服务器端调试工具设置,只需使用console.log()将输出到启动Meteor的终端(a.k.a。命令提示符)。不仅要检查值,还要确保发布函数实际上在每个操作之后被调用(登录/注销) – travellingprog 2013-04-09 15:56:49

    +0

    我在调用之前已经记录了数据的值...当然,发布函数在登录/注销,这就是发生了什么!这真的不是问题的根源。这与在同一个集合中的多个订阅有关。 – cazgp 2013-04-09 16:32:55

    相关问题