Security 用户注销后如何删除数据?

Security 用户注销后如何删除数据?,security,meteor,logout,Security,Meteor,Logout,我遵循了《Packtpub.Getting.Started.with.Meteor.js》一书中的借阅库应用程序示例。其运行速度为: 它工作正常,但当用户在一个类别打开且其项目显示时注销时,该类别及其项目将保留在页面上,而其余的将被过滤掉。刷新页面时,剩余类别也会被过滤掉 发布功能是: Meteor.publish("Categories", function () { Meteor.flush(); // I added this so it will flush out the r

我遵循了《Packtpub.Getting.Started.with.Meteor.js》一书中的借阅库应用程序示例。其运行速度为:

它工作正常,但当用户在一个类别打开且其项目显示时注销时,该类别及其项目将保留在页面上,而其余的将被过滤掉。刷新页面时,剩余类别也会被过滤掉

发布功能是:

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}});
});

看到更多代码很难指出确切的漏洞,但我可以发现:即使没有以用户身份登录,也可以将会话变量
current\u list
设置为id以获取相应的列表文档:

Session.set("current_list",'ZLREaTCPiC6E7ece3')
因此,我假设您在代码的某个地方发布了给定id的列表的详细信息

至少这可以解释为什么当选择了一个类别(这反过来意味着
current\u list
持有一个id)时,即使在注销后列表仍然保持不变

可能使用
Deps.autorun
发布列表,因为一旦会话变量发生更改,列表将立即发布


也许你可以找到这段代码并发布它,或者只是更改它,以便它还包括检查用户是否是该列表或类别的所有者。

考虑使用
用户状态
包来监听用户注销并在服务器上进行一些清理,结果是:

具体而言,您可以使用以下回调:

UserStatus.on "sessionLogout", (advice) ->
  console.log(advice.userId + " with session " + advice.sessionId + " logged out")