Класс CsrfTokenManager
Класс CsrfTokenManager управляет CSRF-токенами
в Symfony. Он создаёт токены для форм, проверяет
их подлинность и удаляет устаревшие. Первым
параметром конструктор принимает генератор токенов,
вторым - хранилище токенов, третьим - менеджер
пространств имён. Если параметры не переданы,
используются значения по умолчанию.
Синтаксис
use Symfony\Component\Security\Csrf\CsrfTokenManager;
$manager = new CsrfTokenManager(
$tokenGenerator = null,
$tokenStorage = null,
$namespace = null
);
Пример
Давайте создадим менеджер и получим CSRF-токен
для формы с идентификатором 'article_form':
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Csrf\CsrfTokenManager;
class ArticleController extends AbstractController
{
public function index(): Response
{
$manager = new CsrfTokenManager();
$token = $manager->getToken('article_form');
return new Response($token->getValue());
}
}
?>
Результат выполнения кода:
"a1b2c3d4e5f6"
Пример
Давайте проверим валидность токена, полученного из запроса:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Csrf\CsrfToken;
use Symfony\Component\Security\Csrf\CsrfTokenManager;
class ArticleController extends AbstractController
{
public function index(Request $request): Response
{
$manager = new CsrfTokenManager();
$token = new CsrfToken('article_form', $request->request->get('_token'));
if ($manager->isTokenValid($token)) {
return new Response('valid');
}
return new Response('invalid');
}
}
?>
Результат выполнения кода при корректном токене:
"valid"
Пример
Давайте обновим токен и удалим его после использования:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Csrf\CsrfTokenManager;
class ArticleController extends AbstractController
{
public function index(): Response
{
$manager = new CsrfTokenManager();
$newToken = $manager->refreshToken('article_form');
$value = $newToken->getValue();
$manager->removeToken('article_form');
return new Response($value);
}
}
?>
Результат выполнения кода:
"f6e5d4c3b2a1"
Смотрите также
-
метод
getToken,
который возвращает CSRF-токен по идентификатору -
метод
isTokenValid,
который проверяет подлинность CSRF-токена -
метод
refreshToken,
который создаёт новый токен вместо старого -
класс
CsrfTokenBadge,
который передаёт CSRF-токен в passport