【发布时间】:2016-05-16 12:31:12
【问题描述】:
Meteor 应用程序中的用户需要经过验证的电子邮件地址才能登录。当用户更改他的电子邮件地址时,我想在服务器端将他注销并发送新的验证电子邮件。
我已经删除了login.resume.tokens,但这并没有杀死用户会话(他在页面重新加载时被注销)。那么我如何杀死服务器端的用户会话呢?还有更多的东西要删除吗?
我希望浏览器反应性地意识到当前会话已关闭。
【问题讨论】:
Meteor 应用程序中的用户需要经过验证的电子邮件地址才能登录。当用户更改他的电子邮件地址时,我想在服务器端将他注销并发送新的验证电子邮件。
我已经删除了login.resume.tokens,但这并没有杀死用户会话(他在页面重新加载时被注销)。那么我如何杀死服务器端的用户会话呢?还有更多的东西要删除吗?
我希望浏览器反应性地意识到当前会话已关闭。
【问题讨论】:
我认为您想使用“currentUser”。它是反应式的,当令牌在服务器端被删除时,它将返回 null。
{{#if currentUser }}
<!-- template here -->
{{/if}}
【讨论】:
db.users.update({"_id" : "Ym7mk45DMbvSd5ND4"},{ $unset: {'services.resume.loginTokens.0': 1} }); 然后将其删除 db.users.update({"_id" : "Ym7mk45DMbvSd5ND4"},{ $pull: {'services.resume.loginTokens': null} }) 来删除令牌
Meteor.user(); 时,我仍然处于登录状态。但是当我 拉 令牌时,那是 Meteor.user(); 返回 null 的时候。我正在使用 meteor 1.3.1
您可以使用 Tracker & autorun 跟踪用户状态,如下所示:
Tracker.autorun(() => {
if (! Meteor.userId() && ! Meteor.loggingIn()) // do something here;
});
【讨论】:
我已经让服务器端 Meteor.call('logout') 为我工作。但是,我找不到它的文档。
对于客户端上的反应变量,请尝试使用Meteor.userId(),例如在 Meteor.autorun(function(){...}); 这样的自动运行中。
【讨论】:
这似乎没有记录,但是您是否在服务器上尝试过Accounts.logout()?看起来像it's implemented。否则,更改后只需在客户端上运行Accounts.logout()。我认为在你的情况下这是可以接受的。
【讨论】: