Symfony2 注销 CSRF 保护:csrf_provider 无法识别
Posted
技术标签:
【中文标题】Symfony2 注销 CSRF 保护:csrf_provider 无法识别【英文标题】:Symfony2 logout CSRF protection: csrf_provider unrecognized 【发布时间】:2014-08-12 18:15:09 【问题描述】:如何保护注销操作?我读了default configuration,然后设置
logout:
csrf_parameter: _token
csrf_provider: ~
intention: logout
但是当我尝试清除缓存时显示以下错误:
[Symfony\Component\Config\Definition\Exception\InvalidConfigurationException] “security.firewalls.main.logout”下无法识别的选项“csrf_provider”
我正在使用 Symfony 2.4 + FOSUserBundle 1.3。
【问题讨论】:
你能改写你的问题标题吗?通常它应该不包含任何在问题中标记的关键词。您的标题仅包含关键字。 你检查过这个吗:***.com/questions/20350330/…? @isi 抱歉,但我无法改写它,因为它非常具体,而且我的想象力和英语水平低下会阻止这样做:( 如果版主认为有必要改写它 - 我同意。 @DenisV 我已经检查过这个话题。这与我的问题不太相关,但我的应用中已经启用了 CSRF 保护。 【参考方案1】:我研究了 Symfony 的代码,发现现在 csrf_provider
选项重命名为 csrf_token_generator
。然后我用谷歌搜索并找到了相关的issue on GitHub。所以问题在一个不同步的文档中。
最终的解决方案是:
配置:
# app/config/security.yml
security:
# ...
firewalls:
# ...
your_firewall_name:
# ...
logout:
# ...
csrf_token_generator: your_csrf_provider # e.g. form.csrf_provider
树枝模板:
<a href=" logout_url('your_firewall_name') ">Logout</a>
请注意,由于帮助程序错误,我们使用logout_url()
而不是logout_path()
(它在开发环境中生成没有app_dev.php
后缀的绝对路径)。 Theese twig helpers 将 %token_parameter%
附加到您的注销 URI,例如http://example.com/app_dev.php/logout?_csrf_token=36wX6HYU2ASeZBQw_iwKcUDbplmFm4W7Ez-tMaavDNo
.
希望这些信息会有所帮助。
【讨论】:
以上是关于Symfony2 注销 CSRF 保护:csrf_provider 无法识别的主要内容,如果未能解决你的问题,请参考以下文章
在 ajax 提交时禁用 symfony 2 csrf 令牌保护