Search by

gabrieldevro / laravel-consent-mode

Gabrieldevro

GDPR cookie banner for Laravel with Google Consent Mode v2: denied by default, applied before any Google tag.

Package info

github.com/Gabrieldevro/laravel-consent-mode

pkg:composer/gabrieldevro/laravel-consent-mode

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-10-21 11:59 UTC

This package is auto-updated.

Last update: 2026-10-28 00:13:30 UTC


README

Banner de cookie-uri conform GDPR pentru Laravel, cu Google Consent Mode v2 setat corect: totul refuzat implicit, înainte de orice etichetă Google.
GDPR cookie banner for Laravel with Google Consent Mode v2, denied by default and applied before any Google tag.

tests Laravel Consent Mode License

Problema pe care o rezolvă

Multe bannere de cookie-uri apar pe ecran, dar Google Analytics pornește oricum în spate și pune cookie-uri (_ga, _gcl_au) înainte ca vizitatorul să aleagă ceva. Asta încalcă GDPR. Am întâlnit exact această situație în auditurile pe care le fac.

Pachetul garantează ordinea corectă:

  1. gtag('consent', 'default', { …: 'denied' }), primul script din pagină;
  2. alegerea salvată se reaplică imediat, pe fiecare pagină;
  3. abia apoi se încarcă gtag.js.
✅ Consent Mode v2 complet analytics_storage, ad_storage, ad_user_data, ad_personalization
✅ 3 opțiuni egale Accept toate, Refuz și Personalizează pe categorii
✅ Redeschidere oricând orice link href="#cookie-settings" redeschide bannerul (cerință GDPR)
✅ Verificare pe server ConsentState::allows($request, 'marketing'), ca să nu încarci un pixel fără acord
✅ Fără dependențe JavaScript simplu, fără jQuery, cu texte în română și engleză

Instalare

composer require gabrieldevro/laravel-consent-mode
CONSENT_GA4_ID=G-XXXXXXXXXX   # opțional: pachetul încarcă GA4 în ordinea corectă

Utilizare

În layout:

<head>
    <x-consent-mode::head />   {{-- primul, înaintea oricărui script Google --}}
    ...
</head>
<body>
    ...
    <x-consent-mode::banner />
</body>

În pagina de politică a cookie-urilor:

<a href="#cookie-settings">Schimbă preferințele pentru cookie-uri</a>

Pe server:

use Gabrieldev\ConsentMode\ConsentState;

@if (app(ConsentState::class)->allows(request(), 'marketing'))
    {{-- Meta Pixel, TikTok Pixel etc. --}}
@endif

În JavaScript poți reacționa la alegere:

document.addEventListener('consent-mode:updated', e => console.log(e.detail)); // { analytics: true, marketing: false }

Personalizare

php artisan vendor:publish --tag=consent-mode-config   # categorii, nume cookie, durată, link politică
php artisan vendor:publish --tag=consent-mode-views    # designul bannerului
php artisan vendor:publish --tag=consent-mode-lang     # texte

Teste

composer test

Testele verifică următoarele:

  • valoarea implicită „refuzat” apare înainte de gtag.js;
  • toate cele 4 semnale Consent Mode sunt prezente;
  • bannerul are categoriile și traducerile;
  • cookie-ul cu alegerea vizitatorului se citește corect pe server, inclusiv cookie-urile corupte.

Făcut de Gabriel Dev. SEO tehnic, GDPR și site-uri Laravel care respectă regulile.