Angular

Angular

Tutorial Angular: Interceptores HTTP funcionales

Angular interceptores funcionales: manejo. Aprende a manejar interceptores funcionales en Angular con ejemplos prácticos y detallados.

Qué es un interceptor

Un interceptor en Angular permite interceptar peticiones HTTP antes de que sean enviadas al backend. 

Esto puede utilizarse para agregar información extra en las cabeceras de las peticiones HTTP que se envían al backend y de esta forma ofrecer información extra.

Un claro ejemplo es el de enviar el token JWT obtenido tras un login al backend en cada petición. Esto permite al backend conocer qué usuario es el que está navegando.

Crear un interceptor funcional

Ejecutar el comando:

ng generate interceptor authentication/jwt

Esto genera el archivo jwt.interceptor.ts con este contenido:

import { HttpInterceptorFn } from '@angular/common/http';


export const jwtInterceptor: HttpInterceptorFn = (req, next) => {

  return next(req);
};

Desarrollar el interceptor

Agregar código en el interceptor que permita añadir una cabecera Authorization en las peticiones HTTP.

¿Para qué sirve la cabecera Authorization? Para enviar información de la autenticación del usuario al backend, como por ejemplo el token JWT, de este modo el backend puede conocer qué usuario es el que está navegando.

Clonamos la request HTTP agregándole la cabecera mencionada:

import { HttpInterceptorFn } from '@angular/common/http';


export const jwtInterceptor: HttpInterceptorFn = (req, next) => {
  const token = localStorage.getItem("jwt_token");
  if(token) {
    req = req.clone({
      headers: req.headers.set('Authorization', `Bearer ${token}`)
    });
  }
  return next(req);
};

Activar el interceptor

Para poder utilizar el interceptor debemos activarlo a nivel de HttpClient para que se utilice en las peticiones HTTP enviadas al backend.

En el archivo app.config.ts agregamos la configuración global del HttpClient con el interceptor:

import { ApplicationConfig } from '@angular/core';
import { provideRouter } from '@angular/router';

import { routes } from './app.routes';
import { provideHttpClient, withInterceptors } from '@angular/common/http';
import { jwtInterceptor } from './authentication/jwt.interceptor';

export const appConfig: ApplicationConfig = {
  providers: [
    provideRouter(routes),
    // Configurar HttpClientModule globalmente:
    // agregar jwtInterceptor para enviar token JWT a backend en peticiones HTTP
    provideHttpClient(withInterceptors([jwtInterceptor])),
  ]
};

Si tenemos componentes standalone que importan HttpClientModule entonces ya no es necesario importarlo ya que eso sobreescribiría la configuración global que acabamos de crear.

Por tanto nuestros componentes standalone no necesitan HttpClientModule en imports, ejemplo:

@Component({
  selector: 'app-book-list',
  standalone: true,
  imports: [RouterLink, NgbAlertModule],
  templateUrl: './book-list.component.html',
  styleUrl: './book-list.component.css'
})
export class BookListComponent {

// Aquí se inyecta el HttpClient global configurado en app.config.ts
constructor (private httpClient: HttpClient) {}
}

Comprobar funcionamiento interceptor

Teniendo frontend, backend y base de datos en ejecución, realizaríamos un login con las credenciales de un usuario y el backend generaría un token JWT.

El AuthenticationService guarda el token en el localStorage.

El interceptor carga el token JWT del localStorage en cada petición HTTP.

Para verificar que se carga correctamente abrimos la consola del navegador y comprobamos que aparece el token en las cabeceras de la petición (request).

Token JWT en cabecera Authorization

Verificamos que aparece la cabecera Authorization con el token.

IMPORTANTE: hay que iniciar sesión para que se haya generado el token y navegar para que se lancen peticiones al backend para traer datos. No confundir las cabeceras de la respuesta con las cabeceras de la petición.

Certifícate en Angular con CertiDevs PLUS

Ejercicios de esta lección Interceptores HTTP funcionales

Evalúa tus conocimientos de esta lección Interceptores HTTP 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