如何在注销的客户端上捕获Meteor.LogoAutotherClient(会话丢失?)
我正在努力确保我的用户在任何时候都不会让太多的设备/浏览器连接到我们的web应用程序 但是,我不知道如何合理地利用Meteor.LogoAutootherClient如何在注销的客户端上捕获Meteor.LogoAutotherClient(会话丢失?),meteor,meteor-accounts,Meteor,Meteor Accounts,我正在努力确保我的用户在任何时候都不会让太多的设备/浏览器连接到我们的web应用程序 但是,我不知道如何合理地利用Meteor.LogoAutootherClient Accounts.onLogin(function () { Meteor.logoutOtherClients(function(error){ // stuff }); }); 如果我调用logoutOtherClients,它确实会强制终止与服务器的连接。但是,它不会更新该客户端的Meteor.
Accounts.onLogin(function () {
Meteor.logoutOtherClients(function(error){
// stuff
});
});
如果我调用logoutOtherClients
,它确实会强制终止与服务器的连接。但是,它不会更新该客户端的Meteor.userId
或登录状态。它仍然显示相同的Meteor.userId
和角色等。这反过来又使得你很难抛出任何你已经注销的这类消息。。。如何检测会话何时被终止以提醒客户端?由于Meteor.userId()
是客户端上的反应变量,请尝试使用Tracker.autorun
捕获Meteor.userId()的状态
一个原因是,如果用户未登录,将不会发布任何内容的发布不会返回
this.ready()
Meteor.publish("myCollections", function (){
if(this.userId){
return MyCollections.find({owner: this.userId});
}
return this.ready(); // <--- This is the important piece to remember
});
Meteor.publish(“myCollections”,函数(){
if(this.userId){
返回MyCollections.find({owner:this.userId});
}
返回此.ready();//这正是我想说的。
Meteor.userId()
没有进行反应性更新。我只是在该客户端上失去了连接,其他什么都没有发生。如果我在客户端控制台上键入本应“注销”的Meteor.userId()
,我只是看到一切原样。ID、配置文件、角色等没有改变。它只是此时没有与服务器的连接。所有请求都已死亡。实际上,我的帐户中已经有了上述代码。onLogin
@btbJosh您有没有找到解决方案?我发现了同样的问题,当resumeToken过期时,或者调用时在登录其他客户端时,其他已连接的客户端表示它们已连接并登录,但所有方法调用和订阅都只是排队,永远不会完成。我甚至可以在控制台上断开连接并重新连接,连接良好,但客户端上的Accounts包仍然认为它已登录。我也有同样的问题,一个nd在这里找到了解决方案:确保在所有发布的末尾返回this.ready()
,尤其是那些具有if(this.userId){}
。我必须检查这是否与我所遇到的问题有关。我现在已经放弃了它,因为我已经转到了其他一些更大的问题。感谢您发布这篇文章。
Meteor.publish("myCollections", function (){
if(this.userId){
return MyCollections.find({owner: this.userId});
}
return this.ready(); // <--- This is the important piece to remember
});