我正在这里阅读教程
https://symfony.com/doc/current/form/csrf_protection.html https://symfony.com/doc/current/form/csrf_protection.html
如何添加 csrf 令牌。它说要使用
form_end()
在模板中。但这不起作用,给出错误:
类型错误:函数参数太少
Symfony\Component\Form\FormRenderer::renderBlock(), 0 传入
E:\projektai\php
projektai\htdocs\mokomieji\symfony_4_demo\var\cache\dev\twig\bb\bb2248f7be504240fcc2ab43dabf593090ebc4c897ce72b1a979082d62914b47.php
在第 48 行,预计至少有 2 个
这是显示如何修复的答案,但仅当您构建了表单对象时:
Symfony 类型错误:函数 FormRenderer::renderBlock() 的参数太少 https://stackoverflow.com/questions/45568847/symfony-type-error-too-few-arguments-to-function-formrendererrenderblock
在没有表单对象的情况下如何做到这一点?这是从登录文档页面登录:
{% if error %}
<div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
<form action="{{ path('login') }}" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="_username" value="{{ last_username }}" />
<label for="password">Password:</label>
<input type="password" id="password" name="_password" />
<button type="submit">Login</button>
{{ form_end() }}
您可以使用助手 twig 功能csrf_token
如文档中所述here https://symfony.com/doc/current/security/csrf_in_login_form.html#rendering-the-csrf-field,例如:
<input type="hidden" name="_csrf_token"
value="{{ csrf_token('authenticate') }}"
>
更多帮助this https://stackoverflow.com/a/17951493/2270041 answer.
UPDATE:
其他策略:从控制器传递:
$tokenProvider = $this->container->get('security.csrf.token_manager');
$token = $tokenProvider->getToken('example')->getValue();
希望这有帮助
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)