CSRF 令牌无效。请尝试重新提交表单

2022-08-30 10:33:04

每次尝试提交表单时,我都会收到以下错误消息:

CSRF 令牌无效。请尝试重新提交表单

我的表单代码是这样的:

<form novalidate action="{{path('signup_index')}}" method="post" {{form_enctype(form)}} role="form" class="form-horizontal">
    <div class="form-group">
        {{ form_label(form.email, 'Email', {'label_attr': {'class': 'col-md-1 control-label'}}) }}
        {{ form_widget(form.email, {'attr': {'class': 'col-md-2'}}) }}
        {{ form_errors(form.email) }}
    </div>

    <div class="form-group">
        {{ form_label(form.nickname, 'Nickname', {'label_attr': {'class': 'col-md-1 control-label'}}) }}
        {{ form_widget(form.nickname, {'attr':{'class': 'col-md-2'}}) }}
        {{ form_errors(form.nickname, {'attr': {'class': 'col-md-3'}}) }}
    </div>
    <div class="form-group">
        {{ form_label(form.password, 'password', {'label_attr': {'class': 'col-md-1 control-label'}}) }}
        {{ form_widget(form.password, {'attr': {'class': 'col-md-2'}}) }}
        {{ form_errors(form.password, {'attr': {'class': 'col-md-3'}}) }}
    </div>

    <div class="form-group">
        {{ form_label(form.password_repeat, 'Repeat password', {'label_attr': {'class': 'col-md-1 control-label'}}) }}
        {{ form_widget(form.password_repeat, {'attr':{'class': 'col-md-2'}}) }}
        {{ form_errors(form.password_repeat, {'attr': {'class': 'col-md-3'}}) }}
    </div>
    <div class="form-group">
        <div class="col-md-1 control-label">
        <input type="submit" value="submit">
    </div>

    </div>
</form>

有什么想法吗?


答案 1

您需要在表单中添加_token

{{ form_row(form._token) }}

截至目前,您的表单缺少 CSRF 令牌字段。如果您使用 twig 表单函数来呈现表单,如下所示,将自动为您呈现 CSRF 令牌字段,但您的代码显示您正在使用 原始 HTML(如 )呈现表单,因此您必须手动呈现该字段。form(form)<form></form>

或者,只需在表单的结束标记之前添加即可。{{ form_rest(form) }}

根据文档

这将呈现尚未为给定表单呈现的所有字段。最好始终在窗体中的某个位置放置此字段,因为它会为您呈现隐藏字段,并使您忘记呈现的任何字段更加明显(因为它将为您呈现字段)。

form_rest(视图,变量)


答案 2

此外,当您的表单包含大量元素时,您可以看到此错误消息。

php 中的此选项.ini问题的原因

; How many GET/POST/COOKIE input variables may be accepted
 max_input_vars = 1000

问题是_token字段会错过 PUT (GET) 请求,因此您必须增加值。

此外,它还涉及一个大文件。增加

upload_max_filesize

选项将解决问题。


推荐