// Desde la terminal creamos servicio de token y escapamos los testsng g s services/token --skip-tests
// Este servicio es el que va a persistir el token y va a escoger la estrategia adecuada para guardar el token(*)Solo en ésta clase vamos a guardar el token en el localStorage, en la siguiente clase vamos a ver cómo guardar el token de forma más segura en cookies.
En el servicio de token, creamos los métodos para guardar, obtener y remover el token:
// Desde la terminal creamos un guardián para proteger nuestras rutasng g g guards/auth --skip-tests
// Seleccionamos el tipo CanActivate
Importamos el Router y el TokenService y mediante una validación le decimos que si no hay token me redirija al login, y para mayor seguridad también retornamos false, y si hay token retornamos true, por lo tanto me habilita las rutas del módulo de layout.
Finalmente en el app.routing.module.ts, le decimos qué ruta queremos proteger si hay token, en este caso, en el path: ‘app’, añadimos el guardián que hemos creado.
// app.routing.module.tsimport{NgModule}from'@angular/core';import{RouterModule,Routes}from'@angular/router';import{AuthGuard}from'@guards/auth.guard';constroutes:Routes=[{path:'',loadChildren:()=>import('./modules/auth/auth.module').then((m)=> m.AuthModule),},{path:'app',canActivate:[AuthGuard],// (*)loadChildren:()=>import('./modules/layout/layout.module').then((m)=> m.LayoutModule),},];@NgModule({imports:[RouterModule.forRoot(routes)],exports:[RouterModule]})exportclassAppRoutingModule{}// (*) Protegiendo la ruta app, por herencia se protegen también las rutas hijas.
Para los panitas que trabajen en Angular 17, el guardian se escribe asi:
Para los que estén en Angular 17 o 18, solo tienen que importar el guard en la ruta del componente que quieran proteger.
```ts
{
path: 'boards',
canActivate: [authGuard], // This is the guard
loadComponent: () => import('./pages/boards/boards.component')
},
{
path: 'board',
canActivate: [authGuard], // This is the guard
loadComponent: () => import('./pages/board/board.component')
}
En que clase se ve la forma correcta de guardar el token?
Me aparece que el CANACTIVATE ya esta marcado como obsoleto, alguien sabe como es la implementación de ello ahora?
Nicolas, que pasa si alguien guarda un token de otro usuario? cuando se hace la verificacion del token si realmente le pertenece al usuario?
Nicolas, pero al usar el canActivate en el modulo se llama tantas veces dependiendo del numero de componentes que se llamen en su routing, no es mejor hacerlo desde el routing de layout y en el path donde llama al componente de layout?
Lo digo porque una vez hice un servicio de permisos y el que llamaba el servicio era el guardián y ejecutaba el método unas 8 veces porque tenía 8 módulos más dentro del módulo de donde lo llamaba
Esa es la idea, que no te cargue ningun componente si no tiene permisos para ese modulo.
La validación debe ser desde el papá (el modulo), no en los hijos.