IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Problème d'authentification avec un User Provider personnalisé [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Par défaut Problème d'authentification avec un User Provider personnalisé
    Bonjour,

    Débutant sous SF2 je me heurte à un problème en essayant d'authentifier un utilisateur sur mon site via un User Provider personnalisé.

    Je n'utilise pas FOSUserBundle ou autre car mes utilisateurs proviennent d'un web service.

    J'ai suivis au mieux le cookbook de SF2 mais rien à faire, j'ai toujours l'erreur "The presented password is invalid."

    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    # app/config/security.yml
     
        encoders:
            MonProjet\WebserviceUserBundle\Security\User\WebserviceUser:
                algorithm: plaintext
     
        providers:
            webservice:
              id: webservice_user_provider
     
        firewalls:
            dev:
                pattern:  ^/(_(profiler|wdt)|css|images|js)/
                security: false
     
            secured_area:
                pattern:    ^/
                anonymous: ~
     
                form_login:
                    login_path:  /login
                    check_path:  /login_check
     
        access_control:
            - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/, roles: ROLE_AUTHENTICATED }
    mes routes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    # app/config/routing.yml
     
    WebserviceUserBundle:
        resource: "@WebserviceUserBundle/Resources/config/routing.yml"
     
    login:
        pattern:   /login
        defaults:  { _controller: MonProjetBundle:Security:login }
    login_check:
        pattern:   /login_check
     
    MonProjetBundle:
        resource: "@MonProjetBundle/Resources/config/routing.yml"
    Je ne vous met pas le code du contrôleur de sécurité, du template login et de ma classe utilisateur qui sont exactement comme le cookbook.

    le User Provider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    <?php
     
    namespace MonProjet\WebserviceUserBundle\Security\User;
     
    use Symfony\Component\Security\Core\User\UserProviderInterface;
    use Symfony\Component\Security\Core\User\UserInterface;
    use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
    use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
    use MonProjet\SoapclientBundle\Entity\S_Client;
     
    class WebserviceUserProvider implements UserProviderInterface
    {
     
        public function loadUserByUsername( $username )
        {
            //--------------------Appel au web service----------------------
            //--------------------------------------------------------------    
            //$user = ...
            // ici j’appelle le web service en connectant l'utilisateur, je récupère en retour un tableau $user
     
            if ( $user )
            {
                $userPassword = $user->passwordMd5;
                $roles = array( 'ROLE_AUTHENTICATED' );
                $newUser = new WebserviceUser( $username, $userPassword, NULL, $roles );
                return $newUser;
            }
            else
            {
                throw new UsernameNotFoundException( sprintf( 'Username "%s" does not exist.', $username ) );
            }
        }
     
        public function refreshUser( UserInterface $user )
        {
            if ( !$user instanceof WebserviceUser )
            {
                throw new UnsupportedUserException( sprintf( 'Instances of "%s" are not supported.', get_class( $user ) ) );
            }
     
            return $this->loadUserByUsername( $user->getUsername() );
        }
     
        public function supportsClass( $class )
        {
            return $class === 'MonProjet\WebserviceUserBundle\Security\User\WebserviceUser';
        }
     
    }
    la connexion au web service se fait bien, je récupère le tableau comme prévu mais l'authentification de l'utilisateur sur mon site ne se fait pas et j'ai toujours la même erreur. Je ne comprend pas bien le fonctionnement de la redirection vers /login_check qui est géré par le kernel SF2 et ça ne m'aide pas à débugger tout ça.

    Je suis complétement bloqué, merci du coup de main.

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Bonour,

    Je ne sais pas d'ou vient ton erreur mais pour te simplifier le debugage, tu peux injecter le logger dans ton la configuration de ton service webservice_user_provider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class WebserviceUserProvider implements UserProviderInterface
    { 
       protected $logger;
       public function _construct($logger){
        $this->logger=$logger;
      }
        public function loadUserByUsername( $username )
        {
           $this->logger->info('loadUserByUserName searching for username:'.$username);
            //....
        }
    }
    Ensuite tu consultes les logs en faisant une recherche dans le profiler.

    le systeme de login check renvoit une redirectResponse donc lorsque tu essaie de te logger cela génere 2 requetes HTTP.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Par défaut
    le systeme de login check renvoit une redirectResponse donc lorsque tu essaie de te logger cela génere 2 requetes HTTP.
    Bon j'ai mis du temps à capter mais mon problème venais bien de là, je me servais d'une variable POST pour le mot de passe qui était perdue au deuxième passage de la requête HTTP. Du coup je l'ai stoquée dans une variable de session et basta. Il me reste encore a peaufiner mon code pour éviter de faire deux appels au web service mais le principe est la !

    Merci en tout cas !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/05/2009, 20h33
  2. problème d'authentification avec aspx
    Par carina dans le forum ASP.NET
    Réponses: 0
    Dernier message: 16/03/2009, 13h26
  3. problème d'authentification avec egroupware
    Par verazano dans le forum Réseau
    Réponses: 1
    Dernier message: 14/06/2008, 14h39
  4. Problème d'authentification avec webService
    Par iDaaX dans le forum Services Web
    Réponses: 7
    Dernier message: 29/01/2007, 19h19
  5. Réponses: 3
    Dernier message: 18/12/2006, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo