Ich habe ng-Leerlauf seit einiger Zeit jetzt für unten Anforderung verwendet.
Unsere Anforderung war, wenn der Benutzer für 60 Minuten im Leerlauf ist. Nach 55 Minuten erscheint das Popup mit der Bestätigungsbox, die besagt, dass du mit deiner Sitzung fortfahren willst oder nicht (ich habe süße Warnung verwendet). Wenn der Benutzer auf weiter klicken, dann setzen Sie die Leerlaufzeit zurück, andernfalls melden Sie sich durch Aufruf der Broadcast-Methode ab.
Konfiguration muss in app.js getan werden, wenn die Benutzer innerhalb app.config Log-in wie unten
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.
Unten ist der Code für die Ansicht 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
});
Nachfolgend finden Der Code für die Behandlung von Leerlauf Ende Ereignis:
$scope.$on('IdleEnd', function() {
$scope.$broadcast('SessionIdleUpdate', 'IdleEnd', 0));
clearTimeout($rootScope.idleTimerSession);
closeModals();
});
Unten ist der Code für Time Out wird es nach aufgerufen werden - - (TimeOut.firstAPiCall + TimeOut.SessionTimeOut)
$scope.$on('IdleTimeout', function (forceLogout) {
swal.close();
$scope.$broadcast('SessionTimeOutLogOut', null);
Idle.unwatch();
});
+1 für eine gute Erklärung und die Verwendung der aktuellen Syntax - bearbeitet, um einen Anruf zu "Idle hinzuzufügen.watch() 'in der' run() '-Funktion, da sonst der Timer nicht startet und die Idle-Ereignisse nicht ausgelöst werden. – Boris
@ Boris, danke. Ihre Bearbeitung wurde abgelehnt, daher habe ich sie selbst hinzugefügt. – fracz
danke für das Hinzufügen der Bearbeitung. Irgendeine Idee, warum es abgelehnt wurde? es funktioniert definitiv nicht für mich ohne 'watch()' und andere scheinen auch dieses Problem zu haben. – Boris