角度会话超时和管理

Osy*_*Osy 43 javascript session-timeout angularjs

有没有办法使用Angularjs管理用户会话?我的意思是::

  • 会话超时 - 系统空闲时.
  • 会话即将到期时发出警报,并提供恢复会话的选项.
  • 在会话过期时尝试发出请求时重定向(或任何其他操作).

可能是拦截器解决这个问题的一个好方法吗?你能提供一个例子吗?

提前致谢.

fra*_*acz 55

尝试ng-idle.它是一个简单的组件,您可以在达到超时之前设置超时和警告时间.然后,您可以查询服务器以进行用户注销或类似的操作.

myApp.config(function(IdleProvider, KeepaliveProvider) {
  IdleProvider.idle(900); // 15 min
  IdleProvider.timeout(60);
  KeepaliveProvider.interval(600); // heartbeat every 10 min
  KeepaliveProvider.http('/api/heartbeat'); // URL that makes sure session is alive
});

myApp.run(function($rootScope, Idle) {
  Idle.watch();
  $rootScope.$on('IdleStart', function() { /* Display modal warning or sth */ });
  $rootScope.$on('IdleTimeout', function() { /* Logout user */ });
});
Run Code Online (Sandbox Code Playgroud)

在上述配置中,当用户空闲900秒(不移动鼠标,按任意键或按钮等)时,正在显示警告.然后它将等待60秒并注销用户(向可能破坏服务器会话的服务器发送请求).

为了确保服务器会话不会过期(即使用户正在做的一切都是移动鼠标),Keepalive服务将每10分钟向服务器发送一个请求.此时间必须小于服务器会话到期时间.

查看演示.

  • 决定是接受还是拒绝编辑的用户通常不熟悉所关注的技术/问题.因此,他们经常拒绝使用"试图回答"原因修改源代码中的某些内容的编辑.在这种情况下,最好给OP留下评论,以便需要改进答案/问题. (3认同)
  • +1用于给出一个很好的解释并使用当前语法 - 编辑以在`run()`函数中添加对`Idle.watch()`的调用,否则计时器将无法启动并且Idle事件将不会触发. (2认同)