Symfony2 in_memory用户提供商问题

时间:2012-11-23 14:04:09

标签: security authentication symfony roleprovider in-memory

我有一个Symfony2应用程序,用于从in_memory用户提供程序加载用户。 security.yml如下:

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 Book Pro)中,此配置按预期工作。当我转到路由_/send__/subscription/show_时,Symfony会要求我登录,如果我输入凭据 admin mypassword ,我可以正确查看页面。

但是在生产环境(Debian服务器)中我必须执行登录才能看到这些路由,但是相同的用户名和密码不起作用! HTTP基本身份验证登录提示永远不会消失!我无法理解。

为什么配置不起作用?总体而言,为什么在我的本地环境中它可以工作,而在生产环境中却没有?

我还看到一个问题,我认为它与:Symfony2 plaintext users don't work有关。 我已经尝试了那里列出的所有建议,但其中任何一个都解决了这个问题。

1 个答案:

答案 0 :(得分:5)

解决!

问题是生产环境在FastCGI中运行PHP,并且使用这样的配置,您必须将以下行添加到.htaccess,以便通过PHP工作进行http基本身份验证:

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

再见!