2012-11-23 110 views
3

我有一個Symfony2應用程序,用於從in_memory用戶提供商加載用戶。該security.yml如下:Symfony2 in_memory用戶提供商問題

security: 
    encoders: 
     Symfony\Component\Security\Core\User\User: plaintext 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 
     ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 

    providers: 
     in_memory: 
      users: 
       admin: { password: mypassword, roles: [ 'ROLE_ADMIN' ] } 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     login: 
      pattern: ^/demo/secured/login$ 
      security: false 

     secured_area: 
      pattern: ^/ 
      anonymous: ~ 
      http_basic: 
       realm: "MyApp Realm - Login" 

    access_control: 
     #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } 
     #- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 } 
     - { path: ^/subscription/show, roles: ROLE_ADMIN } 
     - { path: ^/send, roles: ROLE_ADMIN } 

在我的本地開發環境(在Mac Pro的書),此配置按預期工作。當我去_/send__/subscription/show_的路線時,Symfony要我登錄,如果我輸入憑證adminmypassword我可以正確查看頁面。

但在生產環境(Debian服務器)我必須執行登錄才能看到該路線,但相同的用戶名和密碼不起作用! HTTP基本認證登錄提示永遠不會消失!我無法理解。

爲什麼該配置不起作用?總體而言,爲什麼在我的本地環境中它可以正常工作,而在生產環境中卻不行?

我也看到一個問題,我想它是有關:Symfony2 plaintext users don't work。 我已經嘗試過列出的所有建議,但其中任何一個都可以解決問題。

回答

3

解決!

的問題是生產環境中運行PHP的FastCGI中與這樣的配置,你必須添加以下行爲.htaccess,以便通過PHP的工作有HTTP基本驗證:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

再見!