Pie*_*NAY 3 csrf symfony-forms symfony
我有一个控制器发布表格.
public function myPostAction(Request $request)
{
$form = $this->createForm('my_form', $my_object);
$form->handleRequest($request);
#...
Run Code Online (Sandbox Code Playgroud)
我可以看到我的CSRF令牌作为参数发布
my_form [_token] => lH38HTm5P0Cv3TOc4-9xi2COx-cZ670mpJ_36gR8ccI
我只需要阅读它
$form->get('_token')
Run Code Online (Sandbox Code Playgroud)
这告诉我
儿童"_token"不存在.
我怎样才能得到这个令牌?
这是我将要使用的解决方法:
$token = $request->get($form->getName())['_token'];
Run Code Online (Sandbox Code Playgroud)
我也偶然注意到intention用于生成令牌的是表单名称
$csrf = $this->get('form.csrf_provider');
$intention = $form->getName();
$token = $csrf->generateCsrfToken($intention);
Run Code Online (Sandbox Code Playgroud)
小智 5
就像@Pierre de LESPINAY 所说的,可以通过检索令牌管理器服务来做到这一点。
此服务也可以像这样注入到您的构造函数中:
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
...
public function __construct(CsrfTokenManagerInterface $tokenManager)
{
$this->tokenManager = $tokenManager;
}
Run Code Online (Sandbox Code Playgroud)
并像之前演示的那样稍后使用:
$token = $this->tokenManager->getToken('myformname')->getValue();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7942 次 |
| 最近记录: |