Ich benötige Hilfe beim Umgang mit abgelaufenem Token in meiner angular application. Meine API hat die abgelaufene Zeit, aber mein Problem ist, dass ich vergessen habe, mich von meiner angular application abzumelden Nach einiger Zeit kann ich immer noch auf die Homepage zugreifen, aber ohne Daten. Gibt es etwas, das ich dagegen tun kann? Gibt es Bibliotheken, die damit umgehen können? Oder gibt es etwas, das ich installieren könnte? Besser, wenn nichts installiert wird Kann ich irgendetwas hinzufügen, das das Ablaufen bewältigt, und ich kann nicht auf die Homepage zugreifen, wenn sie abläuft?.
auth.service.ts
export class AuthService {
private loggedIn = false;
constructor(private httpClient: HttpClient) {
}
signinUser(email: string, password: string) {
const headers = new HttpHeaders()
.set('Content-Type', 'application/json');
return this.httpClient
.post(
'http://sample.com/login',
JSON.stringify({ email, password }),
{ headers: headers }
)
.map(
(response: any) => {
localStorage.setItem('auth_token', response.token);
this.loggedIn = true;
return response;
});
}
isLoggedIn() {
if (localStorage.getItem('auth_token')) {
return this.loggedIn = true;
}
}
logout() {
localStorage.removeItem('auth_token');
this.loggedIn = false;
}
}
authguard.ts
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router, private authService: AuthService) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (this.authService.isLoggedIn()) {
// logged in so return true
return true;
}
else {
// not logged in so redirect to login page with the return url
this.router.navigate(['signin'])
return false;
}
}
}
Ich denke, es gibt zwei Lösungen, mit denen Sie spielen können.
Als erstes können Sie einfach Ihre Abmeldefunktion aufrufen, wenn der Browser geschlossen wird:
@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
Auf diese Weise wird beim Schließen des Browsers automatisch Ihre this.auth.logout();
aufgerufen.
Zweitens können Sie eine Bibliothek wie angle2-jwt installieren, um wenn das Token abgelaufen ist zu erkennen =
jwtHelper: JwtHelper = new JwtHelper();
useJwtHelper() {
var token = localStorage.getItem('token');
console.log(
this.jwtHelper.decodeToken(token),
this.jwtHelper.getTokenExpirationDate(token),
this.jwtHelper.isTokenExpired(token)
);
}
Sie können dazu http-Interceptors verwenden.
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');
}
}
});
}