Node.js 不活动后自动从simple ember auth/oauth2服务器注销

Node.js 不活动后自动从simple ember auth/oauth2服务器注销,node.js,express,ember.js,oauth2-server,Node.js,Express,Ember.js,Oauth2 Server,我在前面实现了一个简单的ember身份验证,在后面实现了oauth2服务器,使用密码和刷新令牌授权。当授权令牌即将过期时(此时间在服务器上设置),simple ember auth发出刷新令牌请求,并获取新的授权令牌 这很酷,但是,我需要在一定的非活动时间后自动使会话无效。目前,OAuth2PasswordGrantAuthenticator似乎无限期地发出令牌刷新请求 我欢迎任何关于如何实现这一点的建议或想法。正如@Lux在评论中提到的,您必须实现用户活动检测。因此,您可以在窗口元素上观察诸如

我在前面实现了一个简单的ember身份验证,在后面实现了oauth2服务器,使用密码和刷新令牌授权。当授权令牌即将过期时(此时间在服务器上设置),simple ember auth发出刷新令牌请求,并获取新的授权令牌

这很酷,但是,我需要在一定的非活动时间后自动使会话无效。目前,OAuth2PasswordGrantAuthenticator似乎无限期地发出令牌刷新请求


我欢迎任何关于如何实现这一点的建议或想法。

正如@Lux在评论中提到的,您必须实现用户活动检测。因此,您可以在
窗口
元素上观察诸如
按键
鼠标移动
滚动
等事件。如果它不是关于活动,而是如果页面在焦点上,你可以考虑。如果更多的是关于与应用程序的交互,那么可以观察诸如转换之类的余烬事件

仅当没有任何用户活动时,用于调用OAuth2PasswordGrantAuthenticator
invalidate()
方法

也许最好用一个简单的方法来实现

类似于此(未经测试):


为什么不自己调用
.invalidate()
呢?@Lux我很乐意这么做。如何检测不活动?您是否考虑过通过设置来禁用自动刷新。@8这就是问题所在,您不能。或者问题是:活动对你来说是什么?鼠标移动?点击?过渡?但这可能是一个更一般的JS问题,而不是
ember
ember简单身份验证问题:什么是浏览器中的不活动以及如何检测它?@jelhan:我从这个场景开始:在它中,不管用户的活动是什么,都会被踢出。这对我来说很有效。我只是不得不将“会话”之后的
更改为“ember simple auth”
之后的
。简单地问一个问题:当两个选项卡打开时是否有效?我想如果用户不点击另一个标签,15分钟后就会被踢,对吗?建议的解决方案还不支持多个标签。因此,活动状态必须在windows之间共享。您应该使用与会话存储相同的技术来避免边缘情况。不要调用
会话。直接在debounce中使
无效。使用另一个函数,首先检查另一个选项卡是否有任何活动。
// app/instance-initializers/logout-if-inactive.js
export function initialize(applicationInstance) {
  var session = applicationInstance.lookup('service:session');
  var logoutAfter = 15 * 60 * 1000 // in milliseconds
  var logout = function() {
    Ember.run.debounce(session, 'invalidate', logoutAfter);
  }
  window.onmouseevent = logout;
  window.onkeypress = logout;
}

export default {
  name: 'logout-if-inactive',
  after: 'session',
  initialize: initialize
};