Consentimiento de cookies para Laravel
El banner es una etiqueta en tu layout Blade, antes de @vite. Los consentimientos que piden tus formularios (newsletter, condiciones) se registran desde el controlador con una llamada HTTP, cada uno con su justificante firmado.
Configúralo con tu agente de IA
Conecta el servidor MCP de Croombit a tu editor o agente de código y pega esto. Crea el sitio, las categorías de cookies y el banner, y edita tu código.
Con Croombit: crea un sitio para este proyecto y mantén las categorías de cookies que trae. Escribe el texto del banner y publícalo. Crea una clave publicable de TEST para localhost:3000. Es una app Laravel: añade la etiqueta de cmp.js al principio del <head> de resources/views/layouts/app.blade.php con la clave de config('services.croombit.key'), añade la entrada croombit a config/services.php y registra la casilla de newsletter de nuestro controlador de alta con Http::post a /v1/consent usando CROOMBIT_SECRET_KEY.El agente trabaja en TEST. Pasar a LIVE son dos pasos en la consola: verificar tu dominio y cambiar a una clave LIVE; consulta pasar a LIVE.
O a mano
1. Claves en config/services.php
// config/services.php
'croombit' => [
'key' => env('CROOMBIT_PUBLISHABLE_KEY'), // pk_test_… locally, pk_live_… in production
'secret' => env('CROOMBIT_SECRET_KEY'), // sk_… — server only
],2. Añade la etiqueta a tu layout
{{-- resources/views/layouts/app.blade.php --}}
<head>
<meta charset="utf-8">
<script src="https://croombit.com/cmp.js"
data-tc-api-key="{{ config('services.croombit.key') }}"></script>
{{-- …everything else after it --}}
@vite(['resources/css/app.css', 'resources/js/app.js'])
</head>3. Retén los rastreadores
Etiquetas en tus vistas Blade: type="text/plain" más data-tc-consent. Quedan inertes hasta que el visitante acepta esa categoría.
<script type="text/plain" data-tc-consent="analytics" async
src="https://www.googletagmanager.com/gtag/js?id=G-XXXX"></script>
<script type="text/plain" data-tc-consent="analytics">
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXX');
</script>4. Registra consentimientos desde el controlador
Un POST /v1/consent normal con tu clave secreta, sin SDK. La cabecera Idempotency-Key hace que reintentar sea seguro. Consulta Registrar y consultar consentimiento.
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;
// e.g. in the controller that handles your signup form
Http::withToken(config('services.croombit.secret'))
->withHeaders(['Idempotency-Key' => (string) Str::uuid()])
->post('https://api.croombit.com/v1/consent', [
'subject' => 'email:' . $user->email,
'purpose' => 'newsletter',
'state' => $request->boolean('newsletter') ? 'GRANTED' : 'DENIED',
'channel' => 'signup_form',
])
->throw();Preguntas
Tengo una Content Security Policy. ¿Qué permito?
script-src https://croombit.com para el banner y connect-src https://api.croombit.com para sus llamadas.
¿Funciona con Inertia o Livewire?
Sí. La etiqueta vive en el layout Blade que los envuelve, así que se carga una vez, antes que tu app.
Relacionado
- Consentimiento de cookies para cualquier web
- Consentimiento de cookies para Next.js
- Consentimiento de cookies para React
- Consentimiento de cookies para Vue y Nuxt
- Consentimiento de cookies para Astro
- Consentimiento de cookies para SvelteKit
- Consentimiento de cookies para React Router y Remix
- Consentimiento de cookies para Django
- Consentimiento de cookies para Ruby on Rails
- Consentimiento de cookies para WordPress
- Consentimiento de cookies para Webflow
- Consentimiento de cookies para Framer
- Consentimiento de cookies para Hugo y Jekyll
- Guía: banner de cookies
- Consola: Cookies (escáner)
- TCF, Consent Mode y GPP
- Google Consent Mode v2: modo básico frente a avanzado