I need help in handling expired token in my angular application. My api has the expired time but my problem is when i forgot to log out of my angular application, after some tim
I think there is two solution you can play with.
The first one you can just call you logout function when browser getting closed like:
@HostListener('window:unload', ['$event'])
handleUnload(event) {
this.auth.logout();
}
https://developer.mozilla.org/de/docs/Web/Events/unload
OR
@HostListener('window:beforeunload', ['$event'])
public handleBeforeUnload(event) {
this.auth.logout();
}
https://developer.mozilla.org/de/docs/Web/Events/beforeunload
This way alway when browser getting closed your this.auth.logout();
will be called automatically.
Second you can install library like angular2-jwt it can help you to detect if token has expired
jwtHelper: JwtHelper = new JwtHelper();
useJwtHelper() {
var token = localStorage.getItem('token');
console.log(
this.jwtHelper.decodeToken(token),
this.jwtHelper.getTokenExpirationDate(token),
this.jwtHelper.isTokenExpired(token)
);
}
You can do this using http interceptors.
intercept(req: HttpRequest<any>, next: HttpHandler) {
if(!localStorage.getItem('token'))
return next.handle(req);
// set headers
req = req.clone({
setHeaders: {
'token': localStorage.getItem('token')
}
})
return next.handle(req).do((event: HttpEvent<any>) => {
if(event instanceof HttpResponse){
// if the token is valid
}
}, (err: any) => {
// if the token has expired.
if(err instanceof HttpErrorResponse){
if(err.status === 401){
// this is where you can do anything like navigating
this.router.navigateByUrl('/login');
}
}
});
}
Here's the full solution