Symfony CSRF令牌无效
我的项目在本地计算机上运行良好。但是,一旦我把它上传到OVH服务器上,我在提交任何表格时都会遇到一些问题(比如注册Symfony CSRF令牌无效,symfony,doctrine-orm,twig,fosuserbundle,Symfony,Doctrine Orm,Twig,Fosuserbundle,我的项目在本地计算机上运行良好。但是,一旦我把它上传到OVH服务器上,我在提交任何表格时都会遇到一些问题(比如注册FOSUserBundle以及我自己的表格) 问题是当我提交表单时,我有一个无效的CSRF令牌 我尝试了许多解决方案: 我将{{form_rest(form)}}添加到我的小树枝文件中 我在app/config/config.yml中将csrf\u protection更改为false,然后提交请求,表单中没有任何字段 注意:我尝试使用symfony 2.4和2.3,但问题仍然存
FOSUserBundle
以及我自己的表格)
问题是当我提交表单时,我有一个无效的CSRF令牌
我尝试了许多解决方案:
- 我将
添加到我的小树枝文件中{{form_rest(form)}}
- 我在
中将app/config/config.yml
更改为csrf\u protection
,然后提交请求,表单中没有任何字段false
<form id="modifier_form" name="modifier_form" method="post" {{ form_enctype(form) }}>
<div id="form_prenom">{{ form_row(form.prenom) }}</div>
<div id="form_nom">{{ form_row(form.nom) }}</div>
<div id="form_situation_pro">
<label>Situation professionnelle</label>
<select name="optone"
id="pays_select"
onchange="setOptions(document.modifier_form.optone.options[document.modifier_form.optone.selectedIndex].value);">
<option value=" " selected="selected"> </option>
{% for a in pays %}
<option value="{{ a.getId }}">{{ a.getName }}</option>
{% endfor %}
</select>
</div>
<div id="form_situation_pro_sous">
<label></label>
<select name="opttwo" id="region_select">
<option value=" " selected="selected"></option>
</select>
</div>
{{ form_widget(form) }}
{{ form_restt(form) }}
<input type="submit" value="Enregistrer" />
My config.yml
framework:
#esi: ~
translator: { fallback: "%locale%" }
secret: "%secret%"
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
templating:
engines: ['twig']
#assets_version: SomeVersionScheme
default_locale: "%locale%"
trusted_hosts: ~
trusted_proxies: ~
session:
# handler_id set to null will use default session handler from php.ini
handler_id: ~
fragments: ~
http_method_override: true
如果使用symfony 2.3,请设置窗体结束
{{ form_end(form, {'render_rest': false}) }}
你写的
{{form_restt(form)}
应该是这样的:
{{form_rest(form)}
并删除{{form_widget(form)}
。它用于渲染窗体的一部分。因为您已经呈现了一个字段form.prenom
。form_rest将渲染其余字段
快乐编码…你可以简单地让树枝使用{{form(form)}为你呈现它一旦开始使用小部件、行和标签,你就必须使用{form_start(form)}在提交按钮之后和{form_end(form)}之前,你应该把{{form u rest(form)}
我认为您缺少form_end并更正了form_rest,因为它有一个拼写错误我想提醒您,它在本地(dev和prod模式)上运行良好。@Yakiv Mospan,它是一个细枝代码,而不是java。是{…}你能发布一些PHP、twig和相应的Generated HTML吗?对不起,我在复制{{form_Rest(form)}时犯了一个错误。我也删除了{{form_widget(form)}},但仍然没有任何更改。你可以尝试更新表单类型的setDefaultOptions函数,如,并让我知道结果吗?我已经尝试过并再次重试了。结果是,表单将以空值呈现,并且它将以空值更新我的数据库。这将禁用csrf验证!现在您可以更改
$form->bindRequest($request)代码>至$form->handleRequest($request)代码>现在当我提交时,表单被重置(重定向不起作用),有或没有“csrf_保护”=>false
{{ form_end(form, {'render_rest': false}) }}