我实现了自己的登录系统,因为我使用第三方 Web 服务根据企业身份验证系统对用户进行身份验证。因此,我构建了一个调用服务器方法的表单,以对身份验证系统进行 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 集合/订阅仍然在浏览器中,并且在用户注销后可以在控制台中访问。
我做了一些搜索,但没有找到关于如何正确清除(或停止?)客户端上的这些订阅的具体解决方案。事实上,搜索“meteor 发布订阅”的前 3 名点击并没有提到注销时的停止或安全性。
SO 的一个建议是保存订阅句柄...但我多次调用 subscribe ,所以看来我必须存储一个数组,具体取决于用户在使用应用程序期间触发了多少个不同的订阅,并且然后在注销时通过它们在每个句柄上调用“停止”?
我希望有一种简单的方法来停止所有订阅......当用户单击注销按钮时,为了安全起见,这似乎是合乎逻辑的事情。
Thanks!
你能不能不使用.stop()
集合上的函数?
var subscription = Meteor.subscribe("info");
//on logout
subscription.stop();
根据docs http://docs.meteor.com/#/full/meteor_subscribe:
停止()
取消订阅。这通常会导致服务器指示客户端从客户端缓存中删除订阅的数据。
Updated:也许看看这个包:替补经理 https://github.com/meteorhacks/subs-manager。看起来他们也许能够做你想做的事,特别是从他们的自述文件中:
清除订阅
在某些情况下,我们需要清除缓存的所有订阅。所以,我们可以这样做。
var subs = new SubsManager();
// later in some other place
subs.clear();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)