CSRF Symfony2始终无效令牌

时间:2016-05-12 17:46:30

标签: forms symfony

我生气了。在我的本地环境中,我的所有表单都能完美运行。

在我的prod环境中,我的表单中断了,Symfony2抛出了这个错误:

  

无效的CSRF令牌。再次发送表格

好的,我在Google上搜索并找到了很多解决方案,但没有任何效果。

我在每个表单上手动打印{{ form_row(form._token) }},但错误仍然存​​在。

在我的parameters.yml上我也手动设置域。

我必须做什么?

在我的所有表单中,我都执行handleRequest():

    $form->handleRequest($request);

    if ($form->isValid()) {

表格示例:

<div class="container-fluid">
    <div class="row">
        {{ form_start(form, { 'style': 'horizontal', 'attr': {'autocomplete': 'off'} }) }}
        {{ form_errors(form) }} 
        <div class="col-md-6">
            <h4>{{ 'profile.edit.socialNetworks'|trans({}, 'user') }}</h4>
            <div class="row">
                <div class="col-lg-12">

                    <div class="col-lg-12">
                        {{ form_row(form.twitter) }}
                        {{ form_row(form.youtube) }}
                        {{ form_row(form.website, { 'help_text': 'profile.edit.field.help.website'|trans({}, 'user') }) }}
                    </div>
                </div>
            </div>
            <h4>{{ 'profile.edit.myGameaccounts'|trans({}, 'user') }}</h4>
            <div class="row">
                <div class="col-lg-12">

                    <div class="col-lg-12">
                        <div class="form-group">
                            {{ form_label(form.userSteamTrade) }}
                            <div class="col-lg-10">
                                {{ form_widget(form.userSteamTrade) }}
                                <span class="help-block"><a href="#" id="steamTrade">{{ 'profile.edit.field.help.steamTradeLink'|trans({}, 'user') }}</a></span>
                            </div>
                        </div>
                        {{ form_row(form.userSteam) }}
                        {{ form_row(form.userLol, { 'label': 'profile.edit.field.lolSum'|trans({}, 'user') }) }}
                        {{ form_row(form.userXbox) }}
                        {{ form_row(form.userPs4) }}
                        {{ form_row(form.userBattlenet, { 'help_text': 'profile.edit.field.help.bnet'|trans({}, 'user') }) }}
                    </div>
                </div>
            </div>

            <h4>{{ 'profile.edit.save'|trans({}, 'user') }}</h4>
                <div class="row">
                    <div class="col-lg-12">
                        <div class="col-lg-12">
                            {{ form_row(form.current_password, { 'help_text': 'profile.edit.field.help.password'|trans({}, 'user') }) }}
                            {{ form_row(form.actions) }}
                            {{ form_row(form._token) }}
                        </div>                    
                    </div>
                </div>
        </div>
        {{ form_end(form, {'render_rest': false}) }}
    </div>
</div>

Symfony版本:2.7

1 个答案:

答案 0 :(得分:0)

我明白了。

参数.yml

中的domain变量存在问题

我将domain设置为默认值~,然后就可以了。

parameters.yml之前:

domain: subdomain.domain.net

parameters.yml之后:

domain: ~
forceDomain: subdomain.domain.net # This var is mine not default by Symfony2 to force some routes to execute just on this subdomain

非常感谢!你摇滚!