2012-11-23 1 views
3

J'ai une application Symfony2 qui charge les utilisateurs du fournisseur in_memory. Le security.yml est le suivant:Problème avec le fournisseur d'utilisateurs 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 } 

Dans mon environnement de développement local (un Mac Book Pro) cette configuration fonctionne comme prévu. Quand je vais sur les routes _/send_ ou _/subscription/show_, Symfony me demande de me connecter et si je saisis les informations d'identification admin et mypassword Je peux voir les pages correctement.

Mais dans production environnement (un serveur Debian) Je dois effectuer une connexion pour voir que les routes mais le même nom d'utilisateur et mot de passe ne fonctionne pas! L'invite de connexion d'authentification de base HTTP ne disparaît jamais! Je ne peux pas comprendre.

Pourquoi cette configuration ne fonctionne pas? Et globalement pourquoi dans mon environnement local ça marche et dans l'environnement de production ça ne fonctionne pas?

Je vois aussi une question je suppose qu'il est lié à: Symfony2 plaintext users don't work. J'ai déjà essayé toutes les suggestions énumérées ici mais aucune d'entre elles ne résout le problème.

Répondre

3

Résolu!

Le problème est que les environnements de production fonctionne PHP en FastCGI et avec une telle configuration, vous devez ajouter la ligne suivante à .htaccess, afin d'avoir l'authentification HTTP de base de travail via PHP:

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

Bye!

Questions connexes