ng2-idle icon indicating copy to clipboard operation
ng2-idle copied to clipboard

Idle time out is triggering when I called HTTP request and It shouldn't be

Open bhagath007 opened this issue 7 years ago • 1 comments

Hi,

I am using angular version 4.4.6 and latest ng-idle version.

For instance, I kept idle Timeout = 5sec and idle time = 5sec. So after 10 seconds of inactivity, I am getting logged out. It's working!

But when I called any HTTP request and if it takes more than 10sec to execute I am getting logged out but It shouldn't be.

Please help me out.

My ng-idle Functionality for your ref:-

constructor( private jhiLanguageHelper: JhiLanguageHelper, private loginService: LoginService, private principal: Principal, private router: Router, private idle: Idle, private keepalive: Keepalive, public dialog: MdDialog ) { this.timeOut = 5; this.idletime = 5; idle.setIdle(this.idletime); idle.setTimeout(this.timeOut); idle.setInterrupts(DEFAULT_INTERRUPTSOURCES);

    idle.onIdleEnd.subscribe(() => this.dialog.closeAll());
    idle.onTimeout.subscribe(() => this.logout());    
    idle.onTimeoutWarning.subscribe((countdown) => this.idlelogout(countdown));
    this.reset();
    this.isAuthenticated();
}

isAuthenticated() {
    if (this.principal.isAuthenticated()) {
        this.opened = true;
        $("#main_container").addClass('container-fluid maincontainer');
        $("#iceman").addClass('leftPadding');         
    } else {
        this.opened = false;
        $("#main_container").removeClass('container-fluid maincontainer');
        $("#iceman").removeClass('leftPadding');
    }
}

idlelogout(countdown){
       if (this.principal.isAuthenticated()) {         
        let dialogRef = this.dialog.open(DialogOverviewMainDialog, {
            width: '300px',
            data: { name: this.name, count: countdown, timeOutValue: (countdown/this.timeOut)*100}
        });
    }
}

logout() {
    if (this.principal.isAuthenticated()) {
        this.loginService.logout();
        this.router.navigate(['']);
        location.reload();
    } 
}

Thanks Bhagath

bhagath007 avatar Oct 28 '17 09:10 bhagath007

As I understand you want idle/timeout not to be called if the user idle but the request in progress. Here I recommend to create your own interrupt sources and specify your own interrupt event which will be called for instance each second while there is at least one active http request

egarkavy avatar Oct 03 '22 14:10 egarkavy