我使用Symfony 2构建的应用程序有一条路线/getStarted
。
此路线呈现只包含一个字段的表单:电子邮件。
用户输入电子邮件后,该应用会注册一个帐户。
我的应用已托管,例如http://www.example.COM。
现在,我已经为应用设置了网站(使用CMS构建),但地址为http://www.example.NET。
所以,我想在http://www.example.NET(CMS)上设置一个指向http://www.example.COM/getStarted(即Symfony)的表单。
问题是在Symfony中我使用CSRF,所以我不能简单地将表单的代码放在Wordpress中,因为我没有新的CSRF代码。
是否有任何可能的方法将数据从http://www.example.net(一个简单的html页面)发送到http://www.example.com/getStarted维护csrf?
也许创建另一个action
,就像API一样?但是如何?
同样适用于登录表单,我希望在两个站点上都有.net和.com。
答案 0 :(得分:1)
如果表单没有处理任何敏感信息(根据用户凭据等情况),您可以在该单个表单上禁用CSRF。否则,您可以将Symfony表单嵌入到Wordpress站点的iFrame中 - 这样它将保留它的CSRF令牌。
答案 1 :(得分:0)
要禁用CSRF,您必须在FormType-> setDefaultOptions()中禁用CSRF。 你添加'csrf_protection'=>假
$resolver->setDefaults(array(
'data_class' => 'Acme\BackOfficeBundle\Entity\Registration',
'csrf_protection' => false
));
对于CORS,您有很多解决方案可以做到这一点。 symfony上存在一个很好的解决方案,它是NelmioCorsBundle。我不确定您的应用程序的代码,但尝试将其添加到config.yml
nelmio_cors:
paths:
'^/getStarted':
allow_credentials: true
allow_origin: ['http://www.example.net']
allow_headers: ['*']
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
max_age: 3600