Symfony2注销CSRF保护:csrf_provider无法识别

use*_*505 6 logout symfony csrf-protection

如何保护注销操作?我读了默认配置,然后设置

logout:
    csrf_parameter:       _token
    csrf_provider:        ~
    intention:            logout
Run Code Online (Sandbox Code Playgroud)

但是当我尝试清除缓存时显示以下错误:

[Symfony\Component\Config\Definition\Exception\InvalidConfigurationException]"security.firewalls.main.logout"下无法识别的选项"csrf_provider"

我正在使用Symfony 2.4 + FOSUserBundle 1.3.

use*_*505 16

我研究了Symfony的代码,发现现在的csrf_provider选项被重命名为csrf_token_generator.然后我用Google搜索并在GitHub上找到相关问题.所以在不同步的文档中存在问题.

最终的解决方案是:

组态:

# app/config/security.yml

security:
    # ...
    firewalls:
        # ...
        your_firewall_name:
            # ...
            logout:
                # ...
                csrf_token_generator: your_csrf_provider # e.g. form.csrf_provider
Run Code Online (Sandbox Code Playgroud)

树枝模板:

<a href="{{ logout_url('your_firewall_name') }}">Logout</a>
Run Code Online (Sandbox Code Playgroud)

注意,我们正在使用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.

希望这些信息会有所帮助.