我有一个控制器发布表格。
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"不存在。
我如何获得此令牌?
答案 0 :(得分:8)
以下是我将同时使用的解决方法:
$token = $request->get($form->getName())['_token'];
我也偶然注意到用于生成令牌的intention
是表单名称
$csrf = $this->get('form.csrf_provider');
$intention = $form->getName();
$token = $csrf->generateCsrfToken($intention);
答案 1 :(得分:1)
你可以通过以下方式获得:
$request->request->get('my_form[_token]');
如果你没有禁用CSRF保护,它将自动应用和验证,你不需要自己检查。
答案 2 :(得分:0)
就像@Pierre de LESPINAY所说,可以通过检索令牌管理器服务来实现。
此服务也可以像这样注入到您的构造函数中:
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
...
public function __construct(CsrfTokenManagerInterface $tokenManager)
{
$this->tokenManager = $tokenManager;
}
然后像以前演示的那样用于以后:
$token = $this->tokenManager->getToken('myformname')->getValue();