我实现了自己的登录系统,因为我使用第三方 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/