diff --git a/README.md b/README.md index 9a34fc0..3f2bebc 100644 --- a/README.md +++ b/README.md @@ -118,6 +118,10 @@ Then, let's add consent scripts and modals to the application's views using the ``` +### Middleware + +Add `AddQueuedCookiesToResponse` to your `$middleware` or `$middlewareGroups`. The controller `Whitecube\LaravelCookieConsent\Http\Controllers\ResetController` uses cookie queue to reset cookies. + ## Registering cookies This package aims to centralize cookie declaration and documentation at the same place in order to keep projects maintainable. However, the suggested methodology is not mandatory. If you wish to queue cookies or execute code upon consent somewhere else in your app's codebase, feel free to do so: we have a few available methods that can come in handy when you'll need to [check if consent has been granted](#checking-for-consent) during the request's lifecycle. diff --git a/routes/web.php b/routes/web.php index da89575..1aca8d3 100644 --- a/routes/web.php +++ b/routes/web.php @@ -13,7 +13,8 @@ 'prefix' => config('cookieconsent.url.prefix'), ], function() { Route::get('script', ScriptController::class) - ->name('script'); + ->name('script') + ->middleware('cache.headers:public;max_age=2628000;etag'); Route::post('accept-all', AcceptAllController::class) ->name('accept.all'); diff --git a/src/Http/Controllers/ResetController.php b/src/Http/Controllers/ResetController.php index 47121ca..87deeb5 100644 --- a/src/Http/Controllers/ResetController.php +++ b/src/Http/Controllers/ResetController.php @@ -2,14 +2,16 @@ namespace Whitecube\LaravelCookieConsent\Http\Controllers; -use Whitecube\LaravelCookieConsent\CookiesManager; +use Illuminate\Support\Facades\Cookie; use Illuminate\Http\Request; +use Whitecube\LaravelCookieConsent\CookiesManager; +use Whitecube\LaravelCookieConsent\Facades\Cookies; + -class ResetController -{ - public function __invoke(Request $request, CookiesManager $cookies) - { - $response = ! $request->expectsJson() +class ResetController { + + public function __invoke(Request $request, CookiesManager $cookies) { + $response = !$request->expectsJson() ? redirect()->back() : response()->json([ 'status' => 'ok', @@ -17,6 +19,18 @@ public function __invoke(Request $request, CookiesManager $cookies) 'notice' => $cookies->getNoticeMarkup(), ]); + $domain = config('cookieconsent.cookie.domain'); + + // delete all defined cookies + foreach (Cookies::getCategories() as $category) { + foreach ($category->getCookies() as $cookie) { + Cookie::queue(Cookie::forget( + name: $cookie->name, + domain: $domain, + )); + } + } + return $response->withoutCookie( cookie: config('cookieconsent.cookie.name'), domain: config('cookieconsent.cookie.domain'),