Looking to hire Laravel developers? Try LaraJobs

laravel-consent-mode maintained by gabrieldevro

Description
GDPR cookie banner for Laravel with Google Consent Mode v2: denied by default, applied before any Google tag.
Last update
2026/10/21 13:59 (dev-main)
License
Links
Downloads
0

Comments
comments powered by Disqus

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.