Метод refreshToken класса CsrfTokenManager
Метод refreshToken класса CsrfTokenManager
удаляет существующий токен и создаёт новый
с тем же идентификатором. Первым параметром
передаётся имя токена (строка или объект
TokenInterface). Метод возвращает новый
объект токена CsrfToken.
Метод полезен, когда нужно сменить значение токена без изменения его идентификатора, например, после успешной отправки формы, чтобы защититься от повторной отправки.
Синтаксис
public function refreshToken(string|TokenInterface $tokenId): CsrfToken
Пример
Давайте сгенерируем токен, а затем обновим его:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
class ArticleController extends AbstractController
{
public function index(CsrfTokenManagerInterface $csrfManager): Response
{
$token = $csrfManager->getToken('article_form');
$value1 = $token->getValue();
$newToken = $csrfManager->refreshToken('article_form');
$value2 = $newToken->getValue();
return new Response($value1 . ' | ' . $value2);
}
}
?>
Результат выполнения кода:
"abcde | fghij"
Пример
Давайте убедимся, что после обновления старый токен становится невалидным:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Csrf\CsrfToken;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
class ArticleController extends AbstractController
{
public function index(CsrfTokenManagerInterface $csrfManager): Response
{
$oldToken = $csrfManager->getToken('article_form');
$oldValue = $oldToken->getValue();
$csrfManager->refreshToken('article_form');
$isValid = $csrfManager->isTokenValid(
new CsrfToken('article_form', $oldValue)
);
return new Response($isValid ? 'valid' : 'invalid');
}
}
?>
Результат выполнения кода:
"invalid"
Смотрите также
-
класс
CsrfTokenManager,
который управляет CSRF-токенами -
метод
getToken,
который возвращает CSRF-токен по идентификатору -
метод
isTokenValid,
который проверяет валидность CSRF-токена -
метод
removeToken,
который удаляет CSRF-токен