如何在Symfony中测试安全防火墙后面的页面?

时间:2015-05-09 10:01:53

标签: symfony symfony-security

在Symfony的食谱中,有一个名为How to Simulate Authentication with a Token in a Functional Test的页面。在其中,据说:

  

How to Simulate HTTP Authentication in a Functional Test中描述的技术更清晰,因此是首选方式。

此外,在上面引用链接的页面上,文档说:

  

诀窍是在防火墙中包含http_basic密钥以及form_login密钥

这告诉我,form_login密钥和http_basic密钥以及http_basic应该优先使用是正确的。

这是我的config_test.yml配置文件:

imports:
    - { resource: config_dev.yml }

framework:
    test: ~
    session:
        storage_id: session.storage.mock_file
    profiler:
        collect: false

web_profiler:
    toolbar: false
    intercept_redirects: false

swiftmailer:
    disable_delivery: true

liip_functional_test:
    cache_sqlite_db: true

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                driver:   pdo_sqlite
                path:     %kernel.cache_dir%/test.db

security:
    firewalls:
        default:
            http_basic: ~

但是,当我在test环境中打开我的应用程序时,仍然会被重定向到login_form URL。

为什么不将http_basic设置为文档所说的那样,即它被激活而不是form_login

2 个答案:

答案 0 :(得分:2)

评论为here,将我粘贴在原始问题中的代码运行得很好。它加载登录表单的原因是因为我没有通过http_basic登录。换句话说,当我同时启用form_loginhttp_basic时,我可以通过提供PHP_AUTH_USER / PHP_AUTH_PASSWORD并通过表单登录来登录。实际上,我不需要不同的security_*.yml个文件;我只需要将http_basic: ~添加到已定义的防火墙中。

答案 1 :(得分:1)

security.yml分为security_test.ymlsecurity_prod.yml。 在security_test.yml中放置默认安全配置(与Symfony一起提供)或其他没有防火墙限制的安全配置。

为测试环境创建特定的配置文件,例如config_test.yml

imports:
    - { resource: config.yml }
    - { resource: security_test.yml }

请注意 config.yml本身没有任何安全导入,因为您将收到一些有关覆盖security指令或smth的异常。

使用

创建单独的config_prod.yml
imports:
    - { resource: config.yml }
    - { resource: security_prod.yml }

现在,您为securitytest环境分别prod

如果您的环境命名良好,那么只有在执行测试时,内核才会选择config_test.yml。对于开发环境,您应该使用config_dev.yml而不是config_test.yml