Middleware EncryptCookies
Middleware EncryptCookies входит в стандартный набор
промежуточного слоя Laravel и применяется к каждому запросу
автоматически. Он шифрует все куки, передаваемые между клиентом
и сервером, используя алгоритм, основанный на ключе приложения
APP_KEY. Это предотвращает чтение или модификацию
содержимого кук на стороне клиента.
Основная задача middleware - защита чувствительных данных, которые могут храниться в куках. По умолчанию шифруются все куки, включая куки сессии и CSRF-токена. В некоторых случаях может потребоваться исключить определённые куки из шифрования, например, для интеграции со сторонними сервисами, которые ожидают данные в открытом виде.
Синтаксис
Middleware настраивается в файле
app/Http/Middleware/EncryptCookies.php.
Для исключения кук из шифрования используется свойство
except:
<?php
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
class EncryptCookies extends Middleware
{
protected $except = [
'cookie_name',
];
}
?>
Пример использования
По умолчанию Laravel шифрует все куки. Рассмотрим стандартный файл middleware:
<?php
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
class EncryptCookies extends Middleware
{
protected $except = [];
}
?>
Пример исключения куки из шифрования
Если требуется, чтобы определённая кука передавалась
в открытом виде, добавьте её имя в массив except:
<?php
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
class EncryptCookies extends Middleware
{
protected $except = [
'third_party_token',
'analytics_cookie',
];
}
?>
После добавления куки 'third_party_token' и
'analytics_cookie' в массив исключений, эти куки
не будут шифроваться. Все остальные куки продолжат
шифроваться автоматически.
Пример работы с зашифрованными куками в контроллере
При работе с куками в контроллере используется фасад
Cookie. Зашифрованные куки автоматически
дешифруются при получении:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Cookie;
class CookieController extends Controller
{
public function setCookie()
{
Cookie::queue('user_name', 'john_doe', 60);
return response('Cookie set');
}
public function getCookie()
{
$name = Cookie::get('user_name');
return response("User name: " . $name);
}
}
?>
Результат получения куки:
"User name: john_doe"
Пример использования куки в маршруте
Можно установить куку прямо в определении маршрута
через фасад Cookie или через метод ответа:
<?php
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Cookie;
Route::get('/set-cookie', function () {
Cookie::queue('theme', 'dark', 1440);
return response('Theme cookie set');
});
Route::get('/get-cookie', function () {
$theme = Cookie::get('theme', 'default');
return response("Current theme: " . $theme);
});
?>
Результат выполнения маршрута /get-cookie:
"Current theme: dark"
Смотрите также
-
Middleware
ValidateCsrfToken,
который проверяет CSRF-токен в запросах -
Middleware
SubstituteBindings,
который подставляет модели в маршруты -
Middleware
TrimStrings,
который обрезает пробелы из строк запроса -
Фасад
Cookie,
который предоставляет методы для работы с куками