来自控制器的 CSRF 令牌
CSRF Token from the controller
我有一个控制器正在发布一个表单。
public function myPostAction(Request $request)
{
$form = $this->createForm('my_form', $my_object);
$form->handleRequest($request);
#...
我可以看到我的 CSRF 令牌作为参数发布
my_form[_token] => lH38HTm5P0Cv3TOc4-9xi2COx-cZ670mpJ_36gR8ccI
我只需要阅读它
$form->get('_token')
这告诉我
Child "_token" does not exist.
我怎样才能得到这个令牌?
您可以通过以下方式获得它:
$request->request->get('my_form[_token]');
如果您没有禁用 CSRF 保护,它将自动应用和验证,您无需自行检查。
这是我将同时使用的解决方法:
$token = $request->get($form->getName())['_token'];
偶然间我也注意到生成token的intention
是表单名
$csrf = $this->get('form.csrf_provider');
$intention = $form->getName();
$token = $csrf->generateCsrfToken($intention);
正如@Pierre de LESPINAY 所说,可以通过检索令牌管理器服务来实现。
此服务也可以像这样注入到您的构造函数中:
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
...
public function __construct(CsrfTokenManagerInterface $tokenManager)
{
$this->tokenManager = $tokenManager;
}
之后像之前演示的那样使用:
$token = $this->tokenManager->getToken('myformname')->getValue();
我有一个控制器正在发布一个表单。
public function myPostAction(Request $request)
{
$form = $this->createForm('my_form', $my_object);
$form->handleRequest($request);
#...
我可以看到我的 CSRF 令牌作为参数发布
my_form[_token] => lH38HTm5P0Cv3TOc4-9xi2COx-cZ670mpJ_36gR8ccI
我只需要阅读它
$form->get('_token')
这告诉我
Child "_token" does not exist.
我怎样才能得到这个令牌?
您可以通过以下方式获得它:
$request->request->get('my_form[_token]');
如果您没有禁用 CSRF 保护,它将自动应用和验证,您无需自行检查。
这是我将同时使用的解决方法:
$token = $request->get($form->getName())['_token'];
偶然间我也注意到生成token的intention
是表单名
$csrf = $this->get('form.csrf_provider');
$intention = $form->getName();
$token = $csrf->generateCsrfToken($intention);
正如@Pierre de LESPINAY 所说,可以通过检索令牌管理器服务来实现。
此服务也可以像这样注入到您的构造函数中:
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
...
public function __construct(CsrfTokenManagerInterface $tokenManager)
{
$this->tokenManager = $tokenManager;
}
之后像之前演示的那样使用:
$token = $this->tokenManager->getToken('myformname')->getValue();