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

时间:2014-01-31 13:20:01

标签: security meteor logout

我正在阅读“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}});
});

2 个答案:

答案 0 :(得分:0)

很难通过查看更多代码来指出确切的漏洞,但这是我能找到的:即使没有以用户身份登录,也可以将会话变量current_list设置为id以获取相应的清单文件:

Session.set("current_list",'ZLREaTCPiC6E7ece3')

因此,我假设您的代码中的某个位置会根据其ID发布列表的详细信息。

至少这可以解释为什么在选择某个类别时退出后该列表仍然存在(这反过来意味着current_list拥有一个id)。

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

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

答案 1 :(得分:0)

考虑使用user-status包来监听用户注销并在服务器上进行一些清理:

  

https://github.com/mizzao/meteor-user-status

具体来说,您可以使用以下回调:

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