2

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

如何在功能测试中模拟 HTTP 身份验证中描述的技术更简洁,因此是首选方法。

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

诀窍是在防火墙中包含 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

4

2 回答 2

2

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

于 2015-05-11T18:34:59.250 回答
1

只需拆分security.ymlsecurity_test.ymlsecurity_prod.yml。放入默认安全配置(与security_test.ymlSymfony 一起提供)或其他没有防火墙限制的配置。

为测试环境创建一个特定的配置文件,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 }

现在你有单独security的 fortestprod环境。

如果您的环境命名良好,则内核将config_test.yml仅在执行测试时选择。对于开发环境你应该使用config_dev.yml而不是config_test.yml

于 2015-05-09T16:28:02.083 回答