Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [Angular] Convidiere sessioni tra più tabs

    ciao!

    in un'applicazione angular controllo la possibilità di visualizzare le pagine tramite una guard:
    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;
        }
    }
    funziona bene.
    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]);
                }
            });
        };
    }

  2. #2
    ok mi pare di capire che non è possibile, in quanto ad ogni apertura di tab il sessionStorage viene inizializzato vuoto.
    ergo, o mi tengo le cose come stanno, o uso localStorage.

    correggetemi se sbaglio!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.