Header Ads Widget

Ticker

6/recent/ticker-posts

Manejo / deshabilitación de CSRF en Laravel 5.8 cuando se usa JavaScript / Ajax

 Al crear aplicaciones de JavaScript, ya sea con marcos avanzados como React, Angular o Vue (usando fetch o Axios para HTTP) o con JavaScript / jQuery / Ajax simple, deberá encargarse de adjuntar un token CSRF a sus solicitudes enviadas (particularmente POST solicitudes) para que pueda aprovechar la protección CSRF que ofrece Laravel.

En realidad, Laravel 5.8 no permitirá ninguna solicitud POST sin un token CSRF válido adjunto. CSRF evita que los usuarios malintencionados aprovechen las conexiones establecidas a su sitio web para enviar datos a su servidor en nombre del usuario original.

Laravel genera automáticamente un "token" CSRF para cada sesión de usuario activa administrada por la aplicación. Este token se utiliza para verificar que el usuario autenticado es el que realmente realiza las solicitudes a la aplicación.

Ver más información sobre los tokens CSRF en los documentos de Laravel

En este artículo, veremos cómo puede manejar el token CSRF en aplicaciones de Laravel usando un front-end de JavaScript / Ajax y luego cómo deshabilitar la verificación CSRF para rutas específicas.

Manejo de Laravel 5.8 CSRF al usar Axios

Si está utilizando el cliente Axios para enviar solicitudes HTTP, no tiene que preocuparse por agregar ningún token CSRF a sus solicitudes, ya que, de forma predeterminada, Laravel lo adjunta automáticamente a cada envío de solicitud utilizando Axios. Esto se logra en el resources/assets/js/bootstrap.jsarchivo.

Si prefiere utilizar cualquier otro cliente que no sea Axios, debe adjuntar el token CSRF manualmente. Esto se puede hacer de dos maneras dependiendo de cómo uses JavaScript en tu proyecto de Laravel.

JavaScript incluido en las plantillas de Laravel 5.8

Para aplicaciones simples donde tiene código JavaScript renderizado en sus plantillas Blade, puede usar etiquetas Blade para adjuntar el token. Por ejemplo, supongamos que estamos enviando una solicitud Ajax utilizando el $.ajax()método jQuery , que es un envoltorio de la interfaz JavaScript XHR.

$.ajax({
      type: "POST",
      url: "/endpoint",
      data: {'_token': ""},
      dataType: 'JSON',
      success: function (data) {
        console.log(data);
      }      
    })

Este código utiliza la etiqueta Blade csrf_token()para generar un token CSRF al representar la plantilla.

JavaScript independiente / aplicaciones de una sola página

Si está creando una aplicación de una sola página o está utilizando JavaScript en archivos separados que no están preprocesados ​​por el motor de plantillas de Laravel Blade, deberá seguir estos dos pasos:

Primero debe agregar su token CSRF como una metaetiqueta

<meta name="csrf-token" content="">

A continuación, deberá obtener el valor de la metaetiqueta mediante los métodos de consulta DOM de JavaScript / jQuery

Para jQuery puedes hacer esto:

$('meta[name="csrf-token"]').attr('content');

También puede usar JavaScript simple:

document.querySelector('meta[name="csrf-token"]').content

Deshabilitar CSRF en Laravel 5.8

CSRF está habilitado de forma predeterminada en Laravel 5. Puede desactivarlo para rutas específicas ajustando el app/Http/Middleware/VerifyCsrfToken.phpmiddleware


private $routes = ['/route1'];

public function handle($request, Closure $next)
{

    foreach($this->routes as $route) {

      if ($request->is($route)) {
        return $next($request);
      }
    }

    return parent::handle($request, $next);
}

Conclusión

En este tutorial rápido, hemos visto cómo adjuntar un token CSRF a sus solicitudes HTTP en Laravel 5.8 cuando se usa JavaScript con Laravel y cómo deshabilitar la protección CSRF para rutas específicas.

Publicar un comentario

0 Comentarios