Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

395
Vistas
¿Cómo aplicar canActivate guard en todas las rutas?

Tengo un protector activo angular2 que maneja si el usuario no ha iniciado sesión, lo redirige a la página de inicio de sesión:

 import { Injectable } from "@angular/core"; import { CanActivate , ActivatedRouteSnapshot, RouterStateSnapshot, Router} from "@angular/router"; import {Observable} from "rxjs"; import {TokenService} from "./token.service"; @Injectable() export class AuthenticationGuard implements CanActivate { constructor ( private router : Router, private token : TokenService ) { } /** * Check if the user is logged in before calling http * * @param route * @param state * @returns {boolean} */ canActivate ( route : ActivatedRouteSnapshot, state : RouterStateSnapshot ): Observable<boolean> | Promise<boolean> | boolean { if(this.token.isLoggedIn()){ return true; } this.router.navigate(['/login'],{ queryParams: { returnUrl: state.url }}); return; } }

Tengo que implementarlo en cada ruta como:

 const routes: Routes = [ { path : '', component: UsersListComponent, canActivate:[AuthenticationGuard] }, { path : 'add', component : AddComponent, canActivate:[AuthenticationGuard]}, { path : ':id', component: UserShowComponent }, { path : 'delete/:id', component : DeleteComponent, canActivate:[AuthenticationGuard] }, { path : 'ban/:id', component : BanComponent, canActivate:[AuthenticationGuard] }, { path : 'edit/:id', component : EditComponent, canActivate:[AuthenticationGuard] } ];

¿Hay alguna forma mejor de implementar la opción canActive sin agregarla a cada ruta?

Lo que quiero es agregarlo en la ruta principal y debería aplicarse a todas las demás rutas. He buscado mucho, pero no pude encontrar ninguna solución útil.

Gracias

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede introducir una ruta principal sin componentes y aplicar la protección allí:

 const routes: Routes = [ {path: '', canActivate:[AuthenticationGuard], children: [ { path : '', component: UsersListComponent }, { path : 'add', component : AddComponent}, { path : ':id', component: UserShowComponent }, { path : 'delete/:id', component : DeleteComponent }, { path : 'ban/:id', component : BanComponent }, { path : 'edit/:id', component : EditComponent } ]} ];
about 4 years ago · Santiago Trujillo Denunciar

0

También puede suscribirse a los cambios de ruta del enrutador en la función ngOnInit de su app.component y verificar la autenticación desde allí, por ejemplo

 this.router.events.subscribe(event => { if (event instanceof NavigationStart && !this.token.isLoggedIn()) { this.router.navigate(['/login'],{ queryParams: { returnUrl: state.url}}); } });

Prefiero esta forma de hacer cualquier tipo de verificación en toda la aplicación cuando cambia una ruta.

about 4 years ago · Santiago Trujillo Denunciar

0

Creo que debería implementar un "enrutamiento secundario" que le permita tener un padre (con una ruta "administrador", por ejemplo) y sus hijos.

Luego puede aplicar un canactivate al padre que restringirá automáticamente el acceso a todos sus hijos. Por ejemplo, si quiero acceder a "admin/home", tendré que pasar por "admin", que está protegido por canActivate. Incluso puede definir un padre con una ruta vacía "" si lo desea

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda