更改主机后 CSRF 令牌无效
CSRF token is invalid after changing Host
我们有一个 Symfony2 项目,出于某种原因我们更改了主机,在更改为带有 Plesk 面板的主机后,我们面临着 The CSRF token is invalid. Please try to resubmit the form.
,我想知道为什么?然后使用以下代码提供一个简单的 Twig 表单:
<!doctype html>
<html>
<head>
{# ... #}
<link rel="stylesheet"
href="{{ asset('assets/vendor/bootstrap/dist/css/bootstrap.min.css') }}">
</head>
<body>
<div class="container">
<h2>ADD Item to Crawling List</h2>
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
</div>
</body>
</html>
并且渲染正确
<!doctype html>
<html>
<head>
<link rel="stylesheet"
href="/assets/vendor/bootstrap/dist/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h2>ADD Item to Crawling List</h2>
<form name="form" method="post">
<div id="form"><div><label for="form_post_id" class="required">Instagram Post Id</label><input type="text" id="form_post_id" name="form[post_id]" required="required" /></div><div><button type="submit" id="form_save" name="form[save]">Fetch Comments</button></div><input type="hidden" id="form__token" name="form[_token]" value="j9YWKseFdkU4Z_Yc5nuwm72SKD4dT06gJpARLqPID6I" /><button type="submit" id="form_save" name="form[save]">Fetch Comments</button></div>
</form>
</div>
</body>
</html>
也尝试添加 {{ form_rest(form) }}
但没有任何成就,结果是一样的。
另一个注意事项是我们没有在 config
.yml` 中覆盖会话配置处理程序,它是
framework:
#esi: ~
#translator: { fallbacks: ["%locale%"] }
secret: "%secret%"
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
#serializer: { enable_annotations: true }
templating:
engines: ['twig']
default_locale: "%locale%"
trusted_hosts: ~
trusted_proxies: ~
session:
# handler_id set to null will use default session handler from php.ini
handler_id: ~
任何帮助我们解决此问题的解决方案或想法将不胜感激。
您应该添加:
{{ form_rest(form) }}
就在 form_end 之前,这会在表单的隐藏输入中添加 CSRF 令牌。
我们有一个 Symfony2 项目,出于某种原因我们更改了主机,在更改为带有 Plesk 面板的主机后,我们面临着 The CSRF token is invalid. Please try to resubmit the form.
,我想知道为什么?然后使用以下代码提供一个简单的 Twig 表单:
<!doctype html>
<html>
<head>
{# ... #}
<link rel="stylesheet"
href="{{ asset('assets/vendor/bootstrap/dist/css/bootstrap.min.css') }}">
</head>
<body>
<div class="container">
<h2>ADD Item to Crawling List</h2>
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
</div>
</body>
</html>
并且渲染正确
<!doctype html>
<html>
<head>
<link rel="stylesheet"
href="/assets/vendor/bootstrap/dist/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h2>ADD Item to Crawling List</h2>
<form name="form" method="post">
<div id="form"><div><label for="form_post_id" class="required">Instagram Post Id</label><input type="text" id="form_post_id" name="form[post_id]" required="required" /></div><div><button type="submit" id="form_save" name="form[save]">Fetch Comments</button></div><input type="hidden" id="form__token" name="form[_token]" value="j9YWKseFdkU4Z_Yc5nuwm72SKD4dT06gJpARLqPID6I" /><button type="submit" id="form_save" name="form[save]">Fetch Comments</button></div>
</form>
</div>
</body>
</html>
也尝试添加 {{ form_rest(form) }}
但没有任何成就,结果是一样的。
另一个注意事项是我们没有在 config
.yml` 中覆盖会话配置处理程序,它是
framework:
#esi: ~
#translator: { fallbacks: ["%locale%"] }
secret: "%secret%"
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
#serializer: { enable_annotations: true }
templating:
engines: ['twig']
default_locale: "%locale%"
trusted_hosts: ~
trusted_proxies: ~
session:
# handler_id set to null will use default session handler from php.ini
handler_id: ~
任何帮助我们解决此问题的解决方案或想法将不胜感激。
您应该添加:
{{ form_rest(form) }}
就在 form_end 之前,这会在表单的隐藏输入中添加 CSRF 令牌。