我实施了自己的登录系统,因为我使用第三方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;登出时每个句柄上?
我希望有一种停止所有订阅的简单方法......当用户点击退出按钮时,安全性似乎是合乎逻辑的。
谢谢!
答案 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();