Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor 如何安全地注销并清除所有订阅?_Meteor - Fatal编程技术网

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

Meteor 如何安全地注销并清除所有订阅?,meteor,Meteor,我实现了自己的登录系统,因为我正在使用第三方web服务根据企业身份验证系统对用户进行身份验证。因此,我构建了一个表单,该表单调用一个服务器方法来对身份验证系统进行web服务调用,如果凭据有效,它将使用用户id设置一个会话变量。这就是我更改模板以显示应用程序主屏幕而不是登录屏幕的方式。很好。然后,注销按钮将userid会话变量设置为false,有效地隐藏了主应用程序屏幕并再次显示登录表单 <body> {{#if loggedInUser}} {{> navbar}}

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

{{{if loggedInUser}}
{{>navbar}
{{>mainScreen}
{{else}
{{>customLogin}
{{/if}
Template.navbar.helpers({
loggedInUser:函数(){
return Session.get('userName');
}
}); 
“单击#注销按钮”:函数(){
Session.set(“用户名”,false);
}
但我发现,在用户注销后,本地minimongo集合/订阅仍然在浏览器中,并且可以在控制台中访问

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


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

我希望有一个简单的方法来停止所有订阅。。。当用户单击注销按钮时,为安全起见,似乎是一件合乎逻辑的事情


谢谢

您不能对集合使用
.stop()
函数吗

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

//on logout

subscription.stop();
根据报告:

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


更新:也许可以查看此软件包:。他们似乎可以做你想做的事情,特别是从他们的自述:

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

var subs = new SubsManager();

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

我使用不同的参数多次调用subscribe,这取决于用户交互,因此,我需要跟踪多个订阅句柄(在会话中?),然后在注销时对它们进行迭代,在每个句柄上调用stop。。。?我只是觉得应该有更好的方法。。。我想知道内置的用户帐户系统(帐户twitter等)是否会自动停止…我想是这样的。我检查了我的一个快速应用程序(只授予了一个订阅),并在注销时使用控制台
Collection.find().fetch()
将其清除,以确认.subs.clear工作正常。。。我只是在注销操作中调用此命令,所有订阅都被清除。。。现在,如果会话中有这样的内容。。。ie.Session.clearAllSessionVariables()。。。我习惯于在PHP中这样做: