【问题标题】:Meteor logout on stale session logoutMeteor logout on stale session logout
【发布时间】:2017-07-31 22:17:32
【问题描述】:

我是meteor.js 的新手,如果我的问题不符合社区标准,我很抱歉。

好吧,我正在尝试在其上创建一个简单的应用程序,但遇到了用户不活动后超时的问题。

我正在使用“陈旧会话流星包”在指定的不活动时间后自动使用户超时。它注销用户,但不会取消设置“Meteor.user()”,通过它我可以在流星中知道用户已注销并调用“登录”页面的路由以重新登录。

例如,陈旧的会话在 30 秒不活动后注销用户,然后我检查了“Meteor.user()”的返回值,如果陈旧会话超时,它应该返回 undefined,相反,它正在运行带有 id 和其他详细信息的完整用户对象。

我只是想在过期会话超时时强制注销用户并显示登录屏幕。

我在互联网上搜索了两天,但找不到有关如何执行此操作的任何解决方案。最后贴出问题。

【问题讨论】:

  • 听起来您没有正确安装/使用过时的会话包。你怎么知道用户已经下线了?如果Meteor.user() 仍然有一个值,那么看起来他们仍然处于登录状态。此外,检查Meteor.userId() 而不是Meteor.user() 以获取正在登录的用户。由于发布所需的时间,前者可以在后者之前存在网络上的完整用户对象,尤其是当用户对象很大时。
  • 好吧,“用户注销”是指注销的陈旧会话方式,而不是流星方式。陈旧的会话将 loginToken 的用户表字段设置/更新为空,项目变得无用。是的,我也检查了 Meteor.userId() 但没有成功

标签: session meteor


【解决方案1】:

我已经找到了解决方案,并且它正在运行,因此如果有人需要,请在此处发布。

我挖掘了陈旧的包代码,并在它的 client.js 中用这个替换了代码

Meteor.setInterval(function() {
if (Meteor.userId()) {

    if(activityDetected){
        Meteor.call('heartbeat');
        activityDetected = false;
    } else {
        //This is the wanted behavior
        Meteor.logout();
    }
}

}, heartbeatInterval);

如果在 jquery 事件方面没有检测到任何活动,我只需调用 logout 并且不需要担心 Meteor.user() 或 Meteor.userId() 等。它只需注销并转到我的登录屏幕路线实施。

【讨论】:

    猜你喜欢
    • 2012-05-16
    • 1970-01-01
    • 2016-08-10
    • 2018-11-13
    • 2020-01-22
    • 2012-04-21
    • 2014-10-03
    • 2016-03-22
    相关资源
    最近更新 更多