不活动后从simple-ember-auth / oauth2-server自动注销

时间:2016-04-16 23:37:25

标签: node.js express ember.js oauth2-server

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

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

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

1 个答案:

答案 0 :(得分:3)

正如评论中提到的@Lux,您必须实现用户活动检测。因此,您可以在keypress元素上观察mousemovescrollwindow等事件。如果它与活动无关,但只要页面处于焦点,您可以考虑Page Visibilty Api。如果它更多地与您的应用程序进行交互,则可能会观察过渡等事件。

仅在没有任何用户活动的情况下,使用Ember.debounce来调用OAuth2PasswordGrantAuthenticator invalidate()方法。

也许最好在Application Instance Initializers中实施。

像这样(未经测试):

// 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
};