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

标签 meteor

我实现了自己的登录系统,因为我使用第三方 Web 服务根据企业身份验证系统对用户进行身份验证。因此,我构建了一个表单,该表单调用服务器方法以对身份验证系统进行 Web 服务调用,如果凭据有效,它会使用用户 ID 设置 session 变量。这就是我如何更改模板以显示应用程序的主屏幕而不是登录屏幕。工作正常。然后注销按钮只是将该 userid session 变量设置为 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 集合/订阅仍然在浏览器中,并且在用户注销后可以在控制台中访问。

我做了一些搜索,但没有找到关于如何在客户端正确清除(或停止?)这些订阅的具体解决方案。事实上,搜索“meteor publish subscribe”的前三名并没有提到退出时的停止或安全性。

关于 SO 的一个建议是保存订阅句柄……但我多次调用 subscribe,所以似乎我必须根据用户在使用应用程序期间触发的不同订阅数量来存储一个数组,并且然后在注销时通过他们在每个句柄上调用“停止”?

我希望有一种简单的方法来停止所有订阅......当用户单击注销按钮时,这似乎是为了安全而做的合乎逻辑的事情。

谢谢!

最佳答案

你能不能不用.stop()集合上的功能?

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

//on logout

subscription.stop();

根据docs :

stop() Cancel the subscription. This will typically result in the server directing the client to remove the subscription's data from the client's cache.



更新:也许看看这个包:Subs Manager .看来他们可以做你想做的事,特别是从他们的自述文件中:

清除订阅

在某些情况下,我们需要清除我们缓存的所有订阅。所以,这就是我们可以做到的。
var subs = new SubsManager();

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

关于meteor - 您如何安全地注销并清除所有订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29310306/

相关文章:

android - 在 Android 设备上运行时卡在 Meteor 示例 “todos” 加载屏幕上

javascript - 找不到 meteor 模块

javascript - Meteor session 试图触发模板渲染

mongodb - 如何在传递给模板之前格式化 Collection.find 的结果

javascript - MVC 路由和 SPA 路由之间的区别?

javascript - Meteor 无法从 json 文件加载设置

javascript - 当meteor方法抛出错误时如何刷新客户端值?

javascript - Meteor 订阅和显示用户数

javascript - 当在 Meteor 中呈现不同的模板时如何删除类

javascript - 如何通过他的内容得到一个HTML元素?