我在前面实现了一个简单的ember-auth,在后面实现了oauth2-server,使用了密码和refresh_token授权。当授权令牌即将到期时(此时间在服务器上设置),simple-ember-auth会发出刷新令牌请求,并获取新的授权令牌。
这很酷,但是,我需要在一定的不活动时间后自动使会话无效。目前,OAuth2PasswordGrantAuthenticator似乎无限制地发出令牌刷新请求。
我欢迎任何建议或想法如何实现这一点。
答案 0 :(得分:3)
正如评论中提到的@Lux,您必须实现用户活动检测。因此,您可以在keypress
元素上观察mousemove
,scroll
,window
等事件。如果它与活动无关,但只要页面处于焦点,您可以考虑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
};