Angular

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.

Introducció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.

Certifícate en Angular con CertiDevs PLUS

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

Angular
Puzzle

Guards funcionales

Angular
Test

Decodificar JWT en Angular

Angular
Test

Servicio con HttpClient

Angular
Código

Ciclo de vida de componentes en Angular

Angular
Test

Gestión de productos de Fake Store API

Angular
Proyecto

Data binding en Angular

Angular
Test

Routes sin módulos en Angular

Angular
Código

Router en Angular

Angular
Test

Instalación de Angular

Angular
Puzzle

Route Guards basados en interfaces

Angular
Código

La directiva @if en Angular

Angular
Puzzle

Formularios reactivos en Angular

Angular
Código

Servicios en Angular

Angular
Puzzle

Interceptor funcional

Angular
Test

Servicio con Array

Angular
Código

La directiva @for en Angular

Angular
Puzzle

Interceptores HTTP

Angular
Código

Componentes standalone true

Angular
Puzzle

Formularios con ngModel en Angular

Angular
Puzzle

Routes en Angular

Angular
Test

Comunicación entre componentes Angular

Angular
Test

Parámetros en rutas con ActivatedRoute

Angular
Test

CRUD de Restaurantes y Platos

Angular
Proyecto

Tablas en Angular Material

Angular
Puzzle

Formulario de registro de usuarios

Angular
Proyecto

Instalación y uso de NgBoostrap

Angular
Puzzle

Desarrollo de componentes Angular

Angular
Test

JWT en Angular

Angular
Código

Formularios reactivos en Angular

Angular
Puzzle

Formularios en Angular Material

Angular
Puzzle

Layout con Angular Material

Angular
Puzzle

Effects en Angular

Angular
Test

Data binding

Angular
Código

HttpClient en servicios de Angular

Angular
Puzzle

Desarrollo de módulos Angular

Angular
Puzzle

Comandos Angular CLI

Angular
Puzzle

Subir archivo en formularios

Angular
Test

La directiva routerLink en Angular

Angular
Test

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

Angular

Introducción Y Entorno

Comandos Angular Cli

Angular

Introducción Y Entorno

Desarrollo De Componentes Angular

Angular

Componentes

Data Binding En Angular

Angular

Componentes

Ciclo De Vida De Componentes En Angular

Angular

Componentes

Comunicación Entre Componentes Angular

Angular

Componentes

La Directiva @If En Angular

Angular

Componentes

La Directiva @For En Angular

Angular

Componentes

Componentes Standalone

Angular

Componentes

Desarrollo De Módulos Angular

Angular

Módulos

Routes En Angular

Angular

Enrutado Y Navegación

Router En Angular

Angular

Enrutado Y Navegación

La Directiva Routerlink En Angular

Angular

Enrutado Y Navegación

Parámetros En Rutas Con Activatedroute

Angular

Enrutado Y Navegación

Routes Sin Módulos En Angular

Angular

Enrutado Y Navegación

Servicios En Angular

Angular

Servicios E Inyección De Dependencias

Httpclient En Servicios De Angular

Angular

Servicios E Inyección De Dependencias

Formularios Con Ngmodel En Angular

Angular

Formularios

Formularios Reactivos En Angular

Angular

Formularios

Subir Archivo En Formularios

Angular

Formularios

Layout Con Angular Material

Angular

Integración Con Angular Material

Tablas En Angular Material

Angular

Integración Con Angular Material

Formularios En Angular Material

Angular

Integración Con Angular Material

Instalación Y Uso De Ngboostrap

Angular

Integración Con Bootstrap Css

Signals En Angular

Angular

Signals Y Reactividad

Effects En Angular

Angular

Signals Y Reactividad

Route Guards Basados En Interfaces

Angular

Autenticación Y Autorización

Guards Funcionales

Angular

Autenticación Y Autorización

Interceptores Http Basados En Interfaz

Angular

Autenticación Y Autorización

Interceptores Http Funcionales

Angular

Autenticación Y Autorización

Seguridad Jwt En Angular

Angular

Autenticación Y Autorización

Decodificar Tokens Jwt En Angular

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