1
resposta

Como fazer verificar autenticação em components especificos?

Eu tenho a seguinte logica de autenticação

 initAuthListener() {
    this.afAuth.authState.subscribe(user => {
        if (user) {
            this.store.dispatch(new Auth.SetAuthenticated());
            this.router.navigate(['/training']);
        } else {
            this.trainingServices.cancelSubscriptions();
                this.store.dispatch(new Auth.SetUnauthenticated());
                this.router.navigate(['/login']);
        }
    });
}

Como o app.component estava

 ngOnInit(): void {
this.authService.initAuthListener();
                 }

Toda primeira chamada na pagina ia para /login, então eu passei a verificação para o training.component, que é onde precisa ter autorização(até agora somente ele).

É uma pratica ruim? Qual seria alternativa?

edit


Eu modifiquei da seguinte maneira, aparentemente está ok:

 initAuthListener() {
        this.afAuth.authState.subscribe(user => {
            if (user) {
                this.store.dispatch(new Auth.SetAuthenticated());
                this.router.navigate(['/training']);
            } else {
                 if((this.ROTAS_LIBERADAS.includes(this.router.url))){
                        this.trainingServices.cancelSubscriptions();
                        this.store.dispatch(new Auth.SetUnauthenticated());
                    }else{
                        this.trainingServices.cancelSubscriptions();
                        this.store.dispatch(new Auth.SetUnauthenticated());
                        this.router.navigate(['/login']);
                    }
            }
        });
    }
1 resposta

Fala aí Rodrigo, tudo bem? Para isso você pode criar um Guard, ele será o responsável por verificar se você está logado ou não.

Dai, você aplica o Guard apenas na rota do training.component.

{ canActivate: [SeuGuard], component: TraningComponent, path: '/traning-url' }

Espero ter ajudado