【问题标题】:Meteor: Force user logout on server-sideMeteor:在服务器端强制用户注销
【发布时间】:2016-05-16 12:31:12
【问题描述】:

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

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

【问题讨论】:

    标签: meteor meteor-accounts


    【解决方案1】:

    我认为您想使用“currentUser”。它是反应式的,当令牌在服务器端被删除时,它将返回 null。

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

    【讨论】:

    • 不可能这样,因为我删除服务器上的token后,我的客户端在全局范围内仍然有Meteor.user对象,由于这不为null,currentUser-helper仍然会返回真...
    • 我刚试了一下,它注销了我的用户? (返回 null,因此不允许显示其中的任何模板)我通过将令牌设置为 null db.users.update({"_id" : "Ym7mk45DMbvSd5ND4"},{ $unset: {'services.resume.loginTokens.0': 1} }); 然后将其删除 db.users.update({"_id" : "Ym7mk45DMbvSd5ND4"},{ $pull: {'services.resume.loginTokens': null} }) 来删除令牌
    • 我只是在我的命令窗口中使用流星 mongo 进行了完全相同的操作,但我没有直接注销......只有在重新加载浏览器之后。您是否有一个托管应用程序并在其中进行了试用,不同行为的原因可能是什么?
    • 我有另一个 Meteor 应用程序,你所描述的东西刚刚在其中工作......这很奇怪......
    • 我的应用在本地主机上运行。在我的 javascript 浏览器控制台中,当我在取消设置令牌后运行 Meteor.user(); 时,我仍然处于登录状态。但是当我 令牌时,那是 Meteor.user(); 返回 null 的时候。我正在使用 meteor 1.3.1
    【解决方案2】:

    您可以使用 Tracker & autorun 跟踪用户状态,如下所示:

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

    【讨论】:

      【解决方案3】:

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

      对于客户端上的反应变量,请尝试使用Meteor.userId(),例如在 Meteor.autorun(function(){...}); 这样的自动运行中。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 不,很遗憾,这是不可接受的......在新电子邮件得到验证之前,用户不能以该用户的名义做任何事情。此外,Accounts.logout() 方法在服务器上未定义...
        猜你喜欢
        • 1970-01-01
        • 2017-05-29
        • 2020-09-06
        • 1970-01-01
        • 1970-01-01
        • 2022-08-08
        • 2020-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多