ciao!
in un'applicazione angular controllo la possibilità di visualizzare le pagine tramite una guard:
funziona bene.codice:@Injectable({ providedIn: 'root' }) export class AuthGuard implements CanActivate, CanActivateChild { constructor(private router: Router, private authService: AuthService) { } canActivate( route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree { if (!this.authService.isLoggedIn()) { return this.router.parseUrl('/login'); } return true; } canActivateChild( route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree { if (!this.authService.isLoggedIn()) { return this.router.parseUrl('/login'); } return true; } }
se non si è fatto il login, non si può accedere alle pagina.
ora però se, dopo aver effettuato il login, apro una pagina in un'altra scheda, devo rifare il login.
anche se nella prima scheda il login non è scaduto.
secondo voi è possibile evitare questa cosa?
questo l'authservice:
codice:@Injectable({ providedIn: 'root', }) export class AuthService { private baseUrl: string = environment.baseUrl; constructor(private http: HttpClient, private router: Router) { } getUserId = () => { return sessionStorage.getItem('id'); } getUserName = () => { return sessionStorage.getItem('name'); } getToken = () => { return sessionStorage.getItem('access_token'); } getRuolo = () => { return sessionStorage.getItem('ruolo'); } isLoggedIn = () => { const token = sessionStorage.getItem('access_token'); return !_.isEmpty(token); } doLogin(credenziali: Credenziali): Observable<LoginResponse> { return this.http.post(`${this.baseUrl}/auth/login`, credenziali).pipe( map((res: LoginResponse) => { this.setSessionStorage(res); return res; }) ); } logout(): void { this.http.post(`${this.baseUrl}/auth/logout`, {}).subscribe(() => { sessionStorage.clear(); this.router.navigate(['/login']); }); } recoveryPwd(email: string): Observable<any> { return this.http.get(`${this.baseUrl}/auth/recovery_pwd/${email}`).pipe( map((res: any) => res) ); } private setSessionStorage = (data: any) => { Object.keys(data).forEach((item) => { if (data[item] !== null && typeof data[item] === 'object') { this.setSessionStorage(data[item]); } else { sessionStorage.setItem(item, data[item]); } }); }; }

Rispondi quotando