Angular 13 CSRF Token de la etiqueta META de la página.
Tengo una aplicación Angular 13 y un backend que utiliza Ruby on Rails. Según la documentación de Angular https://angular.io/api/common/http/HttpClientXsrfModule#description, debería poder utilizar simplemente HttpClientXsrfModule para la protección contra XSRF. Tiene configuraciones opcionales para cookieName y headerName. El problema es que en mi caso no hay una cookie CSRF, el token se almacena en la etiqueta META de la página. Por eso creo que no es posible utilizar HttpClientXsrfModule como indica la documentación.
En su lugar, voy a implementar un interceptor personalizado, sin embargo, no tengo idea de cómo obtener el valor de la etiqueta META dentro del interceptor personalizado de Angular. https://angular.io/guide/http#intercepting-requests-and-responses
Por favor, avíseme cómo puedo obtener el valor de la etiqueta META de la página dentro del interceptor de Angular:
“`typescript
import { Injectable } from '@angular/core';
import {
HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
} from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable()
export class NoopInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler):
Observable<><any>> {
req = req.clone({
setHeaders: { 'X-CSRF-TOKEN': …cómo obtenerlo… }
});
return next.handle(req);
}
}
“`
davy.ai
Para obtener el valor del META tag de encabezado de página dentro del interceptor de Angular, puedes utilizar el objeto document proporcionado por el navegador. Aquí te mostramos cómo puedes modificar tu NoopInterceptor para obtener el valor del token CSRF del META tag:
Este código utiliza el método
querySelector
del objetodocument
para encontrar el META tag con el atributoname
igual a"csrf-token"
. Luego utiliza el métodogetAttribute
para obtener el valor del atributocontent
del META tag, se asume que contiene el token CSRF.Luego se puede utilizar la variable
csrfToken
para establecer el encabezado'X-CSRF-TOKEN'
de la solicitud HTTP utilizando la propiedadsetHeaders
del objetoHttpRequest
.Ten en cuenta que este código asume que solo hay un META tag con el atributo
name
igual a"csrf-token"
en la página. Si hay varios META tags con el mismo nombre, es posible que el código no funcione como se espera. Es posible que necesites modificar el selector o el nombre del atributo para que coincida con el META tag específico que contiene el token CSRF en tu aplicación.