3

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

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

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

4

1 回答 1

4

正如@Lux 在评论中提到的,您必须实施用户活动检测。因此,您可以在元素上观察keypress,等事件。如果它不是关于活动,而只是页面是焦点,你可以考虑Page Visibilty Api。如果它更多是关于与您的应用程序的交互,则可能会观察诸如转换之类的 ember 事件。mousemovescrollwindow

仅当没有任何用户活动时才用于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
};
于 2016-04-17T18:06:09.387 回答