我使用密码和 refresh_token 授权在前面实现了 simple-ember-auth,在后面实现了 oauth2-server。当授权令牌即将过期时(这个时间是在服务器上设置的),simple-ember-auth 发出一个刷新令牌请求,并获取一个新的授权令牌。
这很酷,但是,我需要在一定的不活动时间后自动使会话无效。目前,OAuth2PasswordGrantAuthenticator 似乎无限地发出令牌刷新请求。
我欢迎任何建议或想法如何实现这一点。
我使用密码和 refresh_token 授权在前面实现了 simple-ember-auth,在后面实现了 oauth2-server。当授权令牌即将过期时(这个时间是在服务器上设置的),simple-ember-auth 发出一个刷新令牌请求,并获取一个新的授权令牌。
这很酷,但是,我需要在一定的不活动时间后自动使会话无效。目前,OAuth2PasswordGrantAuthenticator 似乎无限地发出令牌刷新请求。
我欢迎任何建议或想法如何实现这一点。
正如@Lux 在评论中提到的,您必须实施用户活动检测。因此,您可以在元素上观察keypress
,等事件。如果它不是关于活动,而只是页面是焦点,你可以考虑Page Visibilty Api。如果它更多是关于与您的应用程序的交互,则可能会观察诸如转换之类的 ember 事件。mousemove
scroll
window
仅当没有任何用户活动时才用于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
};