2016-05-16 145 views
0

我的Meteor应用程序中的用户需要经过验证的电子邮件地址才能登录。当用户更改他的电子邮件地址时,我想在服务器端登录他并发送新的验证电子邮件。流星:在服务器端强制用户注销

我已经删除了login.resume.tokens,但是这并不能杀死用户会话(他在页面重新加载时被注销)。那么我怎么能杀死服务器端的用户会话呢?是否有更多的东西要删除? 我希望浏览器能够反应性地认识到当前会话已关闭。

回答

1

我想你想使用“currentUser”。它是被动的,当令牌在服务器端被删除时它将返回null。

{{#if currentUser }} 
    <!-- template here --> 
{{/if}} 
+0

这不是这种情况,因为在我删除服务器上的令牌之后,我的客户端在全局范围内仍然有Meteor.user对象,因为它不为null,currentUser-helper仍然会返回true ... – ant45de

+0

我刚试了一下,它注销了我的用户? (返回null,因此不允许显示其中的任何模板)我通过将它设置为null来删除该标记'db.users.update({“_ id”:“Ym7mk45DMbvSd5ND4”},{$ unset:{'services .resume.loginTokens.0':1}});'然后删除'db.users.update({“_ id”:“Ym7mk45DMbvSd5ND4”},{$ pull:{'services.resume.loginTokens':null }})' – James

+0

我只是在我的命令窗口中用流星蒙戈完全一样,而且我没有直接注销...只有在重新加载我的浏览器之后。你有一个托管的应用程序,你尝试了它,可能是不同的行为的原因是什么? – ant45de

-1

这似乎没有记录,但您是否在服务器上尝试Accounts.logout()?看起来像it's implemented。否则,只需在更改后在客户端上运行Accounts.logout()。我认为你的情况是可以接受的。

+0

没有那个不幸的是不能接受...用户不应该能够以这个用户的名义做任何事情,直到新的电子邮件被验证。此外,Accounts.logout()方法在服务器上未定义... – ant45de

0

您可以跟踪与跟踪&自动运行,用户状态,像这样:

Tracker.autorun(() => { 
    if (! Meteor.userId() && ! Meteor.loggingIn()) // do something here; 
}); 
0

我已经得到了服务器端Meteor.call('logout')为我工作。但是,我找不到它的文档。

而对于客户端上的无功变量,请尝试使用Meteor.userId()在自动运行的内部像Meteor.autorun(function(){...});