section descargar aside javascript angularjs session-timeout

javascript - descargar - Tiempo de espera de sesión angular y administración



Esta pregunta ya tiene una respuesta aquí:

¿Hay alguna forma de administrar la sesión del usuario usando Angularjs ?, me refiero a ::

  • Tiempo de espera de la sesión: cuando el sistema está inactivo.
  • Alertas cuando la sesión está a punto de caducar con la opción de reanudar la sesión.
  • Redirija (o cualquier otra acción) cuando intente realizar una solicitud si la sesión ha expirado.

¿Podría ser interceptores una buena opción para resolver este problema? ¿Puede dar un ejemplo?

Gracias por adelantado.


He estado usando ng-inactivo desde hace un tiempo para el requisito a continuación.

Nuestro requisito fue cuando el usuario está inactivo durante 60 minutos. Después de 55 minutos, aparece la ventana emergente con el cuadro de confirmación que dice: ¿quieres continuar con tu sesión o no? (He usado la alerta dulce). Si el usuario hace clic en continuar, restablezca el tiempo de inactividad o cierre la sesión con fuerza llamando al método de difusión.

La configuración debe hacerse en app.js cuando los usuarios inician sesión en app.config como a continuación

app.config([''KeepaliveProvider'', ''IdleProvider'', function (KeepaliveProvider, IdleProvider) { IdleProvider.idle(TimeOut.firstAPiCall);--It will call Idle On method IdleProvider.timeout(TimeOut.SessionTimeOut);--It will be called when the total time is (TimeOut.firstAPiCall +TimeOut.SessionTimeOut) KeepaliveProvider.interval(TimeOut.interval);}]) --It will be called like a heart beat for mentioned timeout until the idle start has not occured.

A continuación se muestra el código para mostrar pop-up

$scope.$on(''IdleStart'', function () { $scope.$broadcast(''SessionIdleUpdate'', ''IdleStart'', TimeOut.FirstApicall); $rootScope.idleTimerSession = setTimeout(function () { console.log("pop up appeared on : " + new Date()) $scope.timedout = SweetAlert.swal({ title: "Alert", text: "Your session is about to expire in 5 minutes, Do you want to continue?", type: "warning", showCancelButton: true, confirmButtonColor: "#DDDDD", confirmButtonText: "CONTINUE", cancelButtonText: "No" }, function (isConfirm) { if (isConfirm) { clearTimeout(idleTimer); } else { console.log("pop up closed from confirm on : " + new Date()) $scope.$broadcast(''SessionTimeOutLogOut'', null); Idle.unwatch(); $scope.started = false; } }); //This check is to handle idle pop up if it appears and user doesnt perform any action it will simply logout. var idleTimer = setTimeout(function () { swal.close(); $scope.$broadcast(''SessionTimeOutLogOut'', null); Idle.unwatch(); $scope.timedout = null; }, (TimeOut.sessionTimeOut) * 1000); }, (TimeOut.idleTimeOut - TimeOut.idleCheckDuration) * 1000);-- Time out is added to hold the pop up for that much duration . Because once the idle start is occured you wont be able to call the API });

A continuación se muestra el código para manejar el evento final inactivo:

$scope.$on(''IdleEnd'', function () { $scope.$broadcast(''SessionIdleUpdate'', ''IdleEnd'', 0)); clearTimeout($rootScope.idleTimerSession); closeModals(); });

A continuación se muestra el código para Time Out se llamará después de --- (TimeOut.firstAPiCall + TimeOut.SessionTimeOut)

$scope.$on(''IdleTimeout'', function (forceLogout) { swal.close(); $scope.$broadcast(''SessionTimeOutLogOut'', null); Idle.unwatch(); });


Pruebe ng-idle . Es un componente simple donde puede establecer el tiempo de espera y de advertencia antes de que se alcance el tiempo de espera. A continuación, puede consultar el servidor para el cierre de sesión del usuario o algo similar.

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

En la configuración anterior, cuando el usuario está inactivo durante 900 s (no mueve el mouse, presione cualquier tecla o botón, etc.), se muestra una advertencia. Luego esperará 60 segundos y cerrará la sesión del usuario (envíe la solicitud a un servidor que posiblemente destruya la sesión del servidor).

Para asegurarse de que la sesión del servidor no caduque (incluso si todo lo que hace el usuario es mover el mouse), el servicio de Keepalive enviará una solicitud al servidor cada 10 minutos. Esta vez tiene menos tiempo de expiración de la sesión del servidor.

Pagar la demo