coffeescript
  • meteor
  • meteorite
  • 2013-04-09 118 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

    相關問題