2015-05-09 100 views
2

在Symfony的食譜中,有一個標題爲How to Simulate Authentication with a Token in a Functional Test的頁面。其中說:如何在Symfony中測試安全防火牆後面的頁面?

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環境中打開我的申請,我仍然得到重定向到URL login_form。

爲什麼不設置http_basic就像文檔說的那樣,即它被激活而不是form_login

回答

2

如評論here,將代碼粘貼在我原來的問題中工作得很好。加載登錄表單的原因是因爲我沒有通過http_basic登錄。換句話說,當我同時啓用form_loginhttp_basic時,我可以通過提供PHP_AUTH_USER/PHP_AUTH_PASSWORD以及通過登錄表單登錄。實際上,我不需要不同的security_*.yml文件;我只需要將http_basic: ~添加到已定義的防火牆。

1

只需將security.yml設置爲security_test.ymlsecurity_prod.yml即可。 在security_test.yml中放置默認安全配置(與Symfony一起交付)或其他沒有防火牆限制的配置。

在這裏

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

config.yml本身不具備任何安全進口,因爲您將收到有關覆蓋security指令或不便一些例外創建測試環境中的特定配置文件,如config_test.yml

創建一個單獨的config_prod.yml

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

現在您有testprod環境獨立security

如果您的環境命名是好的,那麼內核只會在執行測試時選擇config_test.yml。對於開發環境您應該使用config_dev.yml而不是config_test.yml

+0

我試過了。問題是我必須複製'config_test.yml'中的很多設置,因爲它已經包含'config_dev.yml'。如果我想按照你的建議做,我必須在'config_test.yml'中重複'config_dev.yml',這樣我就可以包含'security_test.yml'。我在談論標準分配;如果你創建一個新的應用程序並嘗試擁有兩個安全配置,你可能會看到我在說什麼。這就是爲什麼我問是否有辦法強制'安全'鍵被覆蓋。 –

+0

安全性不能被覆蓋。爲了避免重複,將共享配置移動到config.yml並覆蓋config _ *中所需的部分。yml – Valentas

+0

在標準分發中,共享配置已經在'config.yml'中。然而,'config_dev.yml'和'config_test.yml'之間共享的東西不是。例如,這兩種環境('dev'和'test')都包含profiler,工具欄,'router_dev.yml'等等。如果我不想在'config_test.yml'中包含'config_dev.yml',我將不得不復制這些內容。 –

相關問題