Я использую localStorage для сохранения пользовательских данных и токенов при обновлении и перемещении между страницами. Я хочу, чтобы когда пользователь закрывал страницу браузера, localStorage очищал все данные. Я использую ngOnDestroy и HostListener, но ни один из них не работает.
Это мой код:
РЕДАКТИРОВАТЬ: Я пытался заменить localStorage на sessionStorage, но он тоже не работал. Я обновил код ниже
app.component.ts
export class AppComponent {
private authUserService: AuthUserService
// clear sessions after windows is closed
@HostListener('window:beforeunload', ['$event'])
beforeunloadHandler(event) {
this.authUserService.logout();
}
ngOnDestroy () {
this.authUserService.logout();
}
}
Auth-user.service.ts
import { Injectable, OnDestroy } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { Observable, throwError } from 'rxjs';
import { LocalStorage } from '@ngx-pwa/local-storage';
import { SessionStorage } from 'sessionstorage';
export class AuthUserService implements OnDestroy {
private user: IUser;
public errorMessage: string;
isLoginSubject = new BehaviorSubject<boolean>(this.hasToken());
constructor(private userService: UserService) { }
// store the session and call http get
login(id: number) {
this.userService.getUser(id).subscribe(
user => {
this.user = user;
localStorage.setItem('user', JSON.stringify(this.user));
sessionStorage.setItem('token', 'JWT');
this.isLoginSubject.next(true);
},
error => this.errorMessage = <any>error
);
}
// if we have token the user is loggedIn
// @returns {boolean}
private hasToken() : boolean {
return !!localStorage.getItem('token');
}
// @returns {Observable<T>}
isLoggedIn() : Observable<boolean> {
return this.isLoginSubject.asObservable();
}
logout() {
localStorage.removeItem('user');
sessionStorage.removeItem('token');
this.isLoginSubject.next(false);
}
ngOnDestroy() {
this.logout();
}
}