我正在阅读“Packtpub.Getting.Started.with.Meteor.js”一书中的示例Lending Library应用程序。它运行于:
http://matloob.lendlib.meteor.com
它工作正常,但是当用户在一个类别打开并且正在显示其项目时注销时,该类别及其项目将保留在页面上,而其余类别将被过滤掉。刷新页面时,剩余的类别也会被过滤掉。
发布功能是:
Meteor.publish("Categories", function () {
Meteor.flush(); // I added this so it will flush out the remaining data, but :(
return lists.find({owner: this.userId}, {fields: {Category: 1}});
});
答案 0 :(得分:0)
很难通过查看更多代码来指出确切的漏洞,但这是我能找到的:即使没有以用户身份登录,也可以将会话变量current_list
设置为id以获取相应的清单文件:
Session.set("current_list",'ZLREaTCPiC6E7ece3')
因此,我假设您的代码中的某个位置会根据其ID发布列表的详细信息。
至少这可以解释为什么在选择某个类别时退出后该列表仍然存在(这反过来意味着current_list
拥有一个id)。
可能使用Deps.autorun
发布列表,因为一旦更改了会话变量,就会立即发布列表。
也许您可以找到该段代码并发布或仅更改它,以便检查用户是否是该列表或类别的所有者。
答案 1 :(得分:0)
考虑使用user-status
包来监听用户注销并在服务器上进行一些清理:
具体来说,您可以使用以下回调:
UserStatus.on "sessionLogout", (advice) ->
console.log(advice.userId + " with session " + advice.sessionId + " logged out")