您如何安全地注销并清除所有订阅?

时间:2015-03-27 21:14:41

标签: meteor

我实施了自己的登录系统,因为我使用第三方Web服务来针对企业身份验证系统对用户进行身份验证。因此,我构建了一个调用服务器方法的表单,以便对auth系统进行Web服务调用,如果凭据有效,则使用用户的id设置会话变量。这是我更改模板以显示应用程序的主屏幕而不是登录屏幕的方式。工作良好。然后注销按钮将该userid会话变量设置为false,有效地隐藏主应用程序屏幕并再次显示登录表单。

<body>
  {{#if loggedInUser}}
  {{> navbar}}
  {{> mainScreen}}
  {{else}}
  {{> customLogin}}
  {{/if}}
</body>

  Template.navbar.helpers({
    loggedInUser: function () {
      return Session.get('userName');
    }
  }); 

  'click #logoutButton': function () {
      Session.set("userName", false);
}

我发现的是,本地的minimongo集合/订阅仍然在浏览器中,并且在用户注销后可以在控制台中访问。

我做了一些搜索,但没有找到具体的解决方案,如何在客户端上正确清除(或停止?)这些订阅。事实上,搜索&#34; meteor发布订阅&#34;注销时不要提及停止或安全。

关于SO的一个建议是保存订阅句柄...但是我多次调用订阅,所以看来我必须存储一个数组,具体取决于用户在使用期间触发的订阅数量应用程序,然后通过他们调用&#34;停止&#34;登出时每个句柄上?

我希望有一种停止所有订阅的简单方法......当用户点击退出按钮时,安全性似乎是合乎逻辑的。

谢谢!

1 个答案:

答案 0 :(得分:3)

你能否在集合中使用.stop()函数?

var subscription = Meteor.subscribe("info");

//on logout

subscription.stop();

根据docs

  

停止()   取消订阅。这通常会导致服务器指示客户端从客户端的缓存中删除订阅数据。


已更新:也许请查看此软件包:Subs Manager。看起来他们可以做你想做的事情,特别是他们的自述文件:

清除订阅

在某些情况下,我们需要清除我们缓存的所有订阅。所以,我们就是这样做的。

var subs = new SubsManager();

// later in some other place
subs.clear();