5

in_memoryユーザープロバイダーからユーザーをロードする Symfony2 アプリケーションがあります。は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) では、この構成は期待どおりに機能します。routes_/send_またはに移動すると_/subscription/show_、Symfony はログインを要求します。資格情報adminおよびmypasswordを入力すると、ページを正しく表示できます。

しかし、実稼働環境 (Debian サーバー) では、そのルートを確認するためにログインを実行する必要がありますが、同じユーザー名とパスワードは機能しません! HTTP 基本認証のログイン プロンプトが消えることはありません。理解できません。

その構成が機能しないのはなぜですか? 全体として、ローカル環境では機能し、本番環境では機能しないのはなぜですか?

また、関連していると思われる質問も表示されます: Symfony2 plaintext users don't work。そこにリストされているすべての提案をすでに試しましたが、どれも問題を解決します。

4

1 に答える 1

5

解決しました!

問題は、実稼働環境が FastCGI で PHP を実行し、そのような構成では、PHP を介した http 基本認証を機能させるために、.htaccess に次の行を追加する必要があることでした:

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

さよなら!

于 2012-11-24T00:58:31.193 に答える