我知道有通常的方法来呈现 CSRF 令牌隐藏输入form_rest
,但是有没有办法只呈现CSRF输入本身?我已经覆盖{% block field_widget %}
了主题以呈现一段额外的文本。但是由于 CSRF 令牌也在输入字段中呈现,并且我在隐藏字段旁边得到了一段我不需要的文本。所以我想用一个参数单独渲染它,告诉它不要渲染这个文本。
问问题
38230 次
5 回答
101
你可以用{{ form_widget(formView._token) }}
于 2011-09-20T18:16:32.160 回答
54
如果你有formView
对象,你可以使用 Twig 函数渲染它:
{{ form_widget(formView._token) }}
如果还没有 - 您可以在不直接使用表单对象的情况下呈现令牌:
<input type="hidden" name="token" value="{{ csrf_token('some-name') }}">
适用于 Symfony 2.x 和 3.x
要验证令牌,您可以在控制器 (Symfony 3.x) 中使用以下代码:
$submittedToken = $request->request->get('token');
if ($this->isCsrfTokenValid('some-name', $submittedToken)) {
// ... do something,
}
于 2014-01-26T16:28:57.027 回答
20
或者你可以简单地使用这个:
{{ form_row(form._token) }}
这将根据您使用的表单类型自动生成正确的隐藏 HTML 元素,即正确的 HTML 结构和字段名称。
于 2014-11-26T15:51:24.950 回答
4
我需要在 Twig 中渲染 csrf 输入,以便可以将其用于删除操作。按照@YuryPliashkou的回答使用{{ csrf_token('authenticate') }}
给了我不正确的令牌(一个只对登录有效!)
对我有用的是这{{ csrf_token('form') }}
给了我正确的 csrf 令牌,然后我将通过 ajax 将其传递给我的控制器。
<span id="csrf_token" data-token="{{ csrf_token('form') }}"></span>
// my ajax call
$.ajax({
url: localhost/admin/product/4545, // 4545->id of the item to be deleted
type: 'POST',
data: {
"_method": "DELETE",
"form[_token]": $("#csrf_token").data("token") // passed csrf token here
},
success: function(result) {
// Do something
}
});
验证了它在Symfony 3.x上的工作。
于 2017-03-25T02:24:41.480 回答
1
没有找到适合我的解决方案,在示例中找到并测试并为我的 Simfony3 value="{{ _token }}" 工作
<form name="form" method="post" action="{{ path('blog_show', { 'id': blog.id }) }}">
<input name="_method" value="DELETE" type="hidden">
<input class="btn btn-danger" value="Delete" type="submit">
<input id="form__token" name="form[_token]" value="{{ _token }}" type="hidden">
</form>
有关 scrf 的更多信息可以在这里查看:在 Symfony2 中手动创建表单,但仍然在功能上使用它的 CSRF 和 isValid()
于 2016-09-30T04:38:14.233 回答