Angular
Tutorial Angular: Guards funcionales
Angular guards funcionales: protección de rutas. Domina la protección de rutas en Angular utilizando guards funcionales con ejemplos prácticos.
Aprende Angular GRATIS y certifícateIntroducción
Los guards en angular se utilizan para proteger rutas de accesos no autorizados.
Por ejemplo se podrían utilizar para proteger una pantalla de formulario de creación de libros (book-form.component.html) de ser accedida por un usuario que no tenga el rol ADMIN y solo tenga el rol USER.
Crear un guard
Crear un Guard para comprobar si el usuario tiene rol ADMIN y permitir el paso a las rutas.
Ejecutar el comando:
ng generate guard authentication/role-admin
El resultado es un nuevo archivo llamado role-admin.guard.ts
con el siguiente contenido:
import { CanActivateFn} from '@angular/router';
export const roleAdminGuard: CanActivateFn = (route, state) => {
return true;
};
Comprobar el rol del usuario en el guard
Para comprobar el rol del usuario se utilizaría un AuthenticationService
y que devolvería true
o false
si el usuario tiene rol ADMIN:
import { inject } from '@angular/core';
import { CanActivateFn, Router } from '@angular/router';
import { AuthenticationService } from './authentication.service';
export const roleAdminGuard: CanActivateFn = (route, state) => {
const authService = inject(AuthenticationService);
const router = inject(Router);
// Si el usuario es administrador entonces puede entrar en la pantalla
if (authService.getIsAdmin()){
return true;
} else {
return router.navigate(['/login']); // si no es admin entonces redirige a login
}
};
Proteger rutas con el guard
Una vez creado el guard, podemos proteger rutas en el archivo app.routes.ts
:
{
path: 'authors',
component: AuthorListComponent
},
{
path: 'authors/:id/detail',
component: AuthorDetailComponent
},
{
path: 'authors/create',
component: AuthorFormComponent,
canActivate: [roleAdminGuard]
},
{
path: 'authors/:id/update',
component: AuthorFormComponent,
canActivate: [roleAdminGuard]
},
Con este código canActivate: [roleAdminGuard]
en las rutas deseadas logramos que solo los usuarios con rol ADMIN puedan acceder a esas rutas, y si no tienen rol ADMIN entonces serán redirigidos hacia la pantalla de login.
Crear guard para comprobar login
Crear un nuevo guard para proteger rutas y que solo sean accesibles por usuarios autenticados, sin tener en cuenta su rol, solo si está autenticado sí o no:
ng generate guard authentication/user-logged-in
Resultado:
Pulsamos enter y se genera el guard:
Código generado:
import { CanActivateFn } from '@angular/router';
export const userLoggedInGuard: CanActivateFn = (route, state) => {
return true;
};
En este guard comprobamos si el usuario ha iniciado sesión con la ayuda del AuthenticationService
:
import { inject } from '@angular/core';
import { CanActivateFn, Router } from '@angular/router';
import { AuthenticationService } from './authentication.service';
export const userLoggedInGuard: CanActivateFn = (route, state) => {
const authService = inject(AuthenticationService);
const router = inject(Router);
if (authService.existsToken()) {
return true;
} else {
return router.navigate(['/login']);
}
};
Una vez completado el código del guard lo utilizamos sobre las rutas que se desea proteger en app.routes.ts
:
Por ejemplo:
{
path: 'books/:id/detail',
component: BookDetailComponent,
canActivate: [userLoggedInGuard]
}
De este modo podemos tener múltiples guards para proteger las rutas:
Resultado:
Si un usuario intenta entrar a los componentes que tienen el guard sin hacer primero el login será redirigido automáticamente hacia la pantalla de login, no pudiendo entrar al componente sin haberse identificado primero.
Ejercicios de esta lección Guards funcionales
Evalúa tus conocimientos de esta lección Guards funcionales con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Signals en Angular
Guards funcionales
Decodificar JWT en Angular
Servicio con HttpClient
Ciclo de vida de componentes en Angular
Gestión de productos de Fake Store API
Data binding en Angular
Routes sin módulos en Angular
Router en Angular
Instalación de Angular
Route Guards basados en interfaces
La directiva @if en Angular
Formularios reactivos en Angular
Servicios en Angular
Interceptor funcional
Servicio con Array
La directiva @for en Angular
Interceptores HTTP
Componentes standalone true
Formularios con ngModel en Angular
Routes en Angular
Comunicación entre componentes Angular
Parámetros en rutas con ActivatedRoute
CRUD de Restaurantes y Platos
Tablas en Angular Material
Formulario de registro de usuarios
Instalación y uso de NgBoostrap
Desarrollo de componentes Angular
JWT en Angular
Formularios reactivos en Angular
Formularios en Angular Material
Layout con Angular Material
Effects en Angular
Data binding
HttpClient en servicios de Angular
Desarrollo de módulos Angular
Comandos Angular CLI
Subir archivo en formularios
La directiva routerLink en Angular
Todas las lecciones de Angular
Accede a todas las lecciones de Angular y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Instalación Angular
Introducción Y Entorno
Comandos Angular Cli
Introducción Y Entorno
Desarrollo De Componentes Angular
Componentes
Data Binding En Angular
Componentes
Ciclo De Vida De Componentes En Angular
Componentes
Comunicación Entre Componentes Angular
Componentes
La Directiva @If En Angular
Componentes
La Directiva @For En Angular
Componentes
Componentes Standalone
Componentes
Desarrollo De Módulos Angular
Módulos
Routes En Angular
Enrutado Y Navegación
Router En Angular
Enrutado Y Navegación
La Directiva Routerlink En Angular
Enrutado Y Navegación
Parámetros En Rutas Con Activatedroute
Enrutado Y Navegación
Routes Sin Módulos En Angular
Enrutado Y Navegación
Servicios En Angular
Servicios E Inyección De Dependencias
Httpclient En Servicios De Angular
Servicios E Inyección De Dependencias
Formularios Con Ngmodel En Angular
Formularios
Formularios Reactivos En Angular
Formularios
Subir Archivo En Formularios
Formularios
Layout Con Angular Material
Integración Con Angular Material
Tablas En Angular Material
Integración Con Angular Material
Formularios En Angular Material
Integración Con Angular Material
Instalación Y Uso De Ngboostrap
Integración Con Bootstrap Css
Signals En Angular
Signals Y Reactividad
Effects En Angular
Signals Y Reactividad
Route Guards Basados En Interfaces
Autenticación Y Autorización
Guards Funcionales
Autenticación Y Autorización
Interceptores Http Basados En Interfaz
Autenticación Y Autorización
Interceptores Http Funcionales
Autenticación Y Autorización
Seguridad Jwt En Angular
Autenticación Y Autorización
Decodificar Tokens Jwt En Angular
Autenticación Y Autorización
Certificados de superación de Angular
Supera todos los ejercicios de programación del curso de Angular y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.
En esta lección
Objetivos de aprendizaje de esta lección
- Crear un Guard con Angular CLI
- Comprobar el rol del usuario desde el Guard
- Utilizar el Guard en las rutas en app.routes.ts
- Proteger rutas de usuarios no autenticados
- Proteger rutas de usuarios no autorizados