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.
Author
Last update
2026/10/21 13:59
(dev-main)
License
Downloads
0
Tags
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ă:
gtag('consent', 'default', { …: 'denied' }), primul script din pagină;- alegerea salvată se reaplică imediat, pe fiecare pagină;
- 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.