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 :

La session hors controller [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Points : 67
    Points
    67
    Par défaut La session hors controller
    Salut,

    j'aimerai avoir accès à la session en dehors d'un controller, je m'explique :

    Pour mon authentification j'ai créé un service qui dans le constructeur de la classe userprovider.php récupère toute les variables dont j'ai besoin pour l'authentification.
    Mon problème est que si j'enregistre pas en session mes informations il fait a priori 2 passages pour l'authentification dans la méthode loadByUsername().

    Le premier passage pas de soucis j'ai bien mes informations mais au 2eme passage j'ai plus rien.
    Alors soit le problème viens du faite qu'il y est 2 passages dans cette méthode je ne saurai expliquer pourquoi.

    Ou alors c'est normal que l'authentification fonctionne comme ça et dans ce cas là il faudrait que j'enregistre mes données en session pour que au 2eme passage il est toutes les informations...

    Donc dans le constructeur de mon UserProvider je peut récupérer la session grâce au service :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <argument type="service" id="session" />
    mais mon soucis c'est comment récupérer ma session dans la méthode loadByUsername($username) ?

  2. #2
    Inscrit
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 476
    Points
    476
    Par défaut
    $this->session->... ?

    Pourquoi t'as besoin de la session dans ton userprovider ? C'est ca qui m'inquiète le plus moi.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Points : 67
    Points
    67
    Par défaut
    Enfaite je ne peut pas faire $this->session car je ne suis pas dans un controller mais enfaite j'ai trouvé en utilisant tout simplement $_SESSION mais j'ai toujours la même erreur donc je ne comprend pas le soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: ldap_search() [<a href='function.ldap-search'>function.ldap-search</a>]: Search: Operations error in C:\wamp\www\Projet\src\Societe\UserBundle\Model\UserProvider.php line 64
    enfaite je fait une authentification ldap mais ce que je ne comprend pas c'est que mon authentification ldap fonctionne bien car au premier passage je récupère bien tout et mon objet user récupère bien les informations du ldap et ensuite j'ai cette erreur...

    Mais je viens de penser que c'est surement au niveau de la connexion ldap où je doit avoir le même problème mais c'est bizarre que l'erreur soit au niveau du ldap search et pas au niveau de ldap connect ou bind

  4. #4
    Inscrit
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 476
    Points
    476
    Par défaut
    Bien sur que tu peux accéder à la session hors contrôleur, il manquerait plus que ca.

    Dans la définition du service de ton userprovider tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     arguments: [blabla, @session]
    Et dans son constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function __construct(blabla, $session)
    {
    $this->session = $session;
    }
    Et ensuite tu y as accès en permanence.

    Stp n'utilise pas $_SESSION sinon ca va te créer plein de problème !

    Et sinon pourquoi tu n'utilises pas le bundle qui existe déjà pour la connexion ldap ?

  5. #5
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Points : 67
    Points
    67
    Par défaut
    Avoir ma session dans le constructeur ne me pose pas de problème en revanche quand j'utilise la méthode de l'objet j'ai pas d'accès à mes données de session (enfin pas en permanence, c'est à dire que dans l'erreur que j'ai mis plus haut avec le tracer de l'erreur je voit que la variable dans ma recherche ldap est vide sauf en utilisant $_SESSION) alors que quand je fait un var_dump j'ai bien mes infos il passe donc 2 fois dans la méthode.

    Mais là je viens de tester avec que des variables de session et je vois dans le tracer que j'ai bien mes infos mais j'ai toujours cette erreur que je ne comprend pas.

    Je n'ai pas trouvé de bundle existant qui fasse exactement ce dont j'ai besoin.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    A mon avis déjà le soucis principal viens du fait que tu utilise un userprovider pour faire l'authentification alors que ce n'est pas vraiment son but ni son rôle.

    Je te conseille d'aller voir du coté des custom auth provider :
    http://symfony.com/doc/2.0/cookbook/..._provider.html

    Qui te permettra de gérer ton authentification LDAP sans aucun soucis. (C'est ce que je fait avec aussi une surcouche SSO via NTLM).

    Cela evitera de passer plusieurs fois dans des processus inutile et restera dans les normes Symfony.

    Jette aussi un coup d'oeil a ce thread :
    http://www.developpez.net/forums/d11...ation-externe/

    surtout mon dernier commentaire qui complete la doc officielle pour eviter des auth multiples.

  7. #7
    Inscrit
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 476
    Points
    476
    Par défaut
    Exact, Tolriq t'as pas tort. Ca + le fait d'avoir besoin de session, ca m'inspire pas du bon.

    Attendons que dourouc passe par la, c'est un expert ldap maintenant

  8. #8
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Points : 67
    Points
    67
    Par défaut
    Bon enfaite je viens de me rendre compte que n'ayant pas travaillé sur ce projet depuis un assez bon moment (genre environ PR8) il y a des choses qui ont du changer car avant ça fonctionnai en mettant des valeurs en dur et que maintenant ça ne fonctionne plus...

    Donc je suis partie pour y travailler un moment !

  9. #9
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Points : 67
    Points
    67
    Par défaut
    Bon j'ai trouvé un bundle qui pourrai éventuellement correspondre à ce que je recherche et magie magie j'ai la même erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: ldap_search() [<a href='function.ldap-search'>function.ldap-search</a>]: Search: Operations error in IMAG\LdapBundle\Manager\LdapManager.php line 94
    alors j'ai bien compris que l'erreur viens de la méthode ldap_search() mais pourtant pour l'avoir déjà utilisé ça fonctionnai bien alors dite moi si il y a une erreur dans ma syntaxe (oui oui je suis déjà allez voir phpmanual ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $search = ldap_search($maConnectionLdap, 'dc=premier_noeud, dc=deuxieme_noeud', '(mail=toto@titi.tata)');

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    Pour la partie LDAP j'utilise http://adldap.sourceforge.net/ tu auras des messages d'erreur bien plus précis.

    Maintenant est ce que ton ldap est bien bind ?

  11. #11
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Points : 67
    Points
    67
    Par défaut
    Enfaite c'est ça le problème c'est que ce LdapBundle je ne comprend pas bien son fonctionnement il fait un un ldap_search avant de bind je comprend pas à quoi ça sert...

    Est ce que selon toi ce bundle :
    https://github.com/BorisMorel/LdapBundle
    fait une authentification Ldap en fonction du bind ?

    Ce que j'en comprend c'est qu'il faut avoir une connexion (admin) qui permet ensuite de vérifier si l'utilisateur existe.
    Si c'est le cas je partirai bien sur l'idée de modifier le code pour que le bind soit l'authentification.

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    La vraie question est quel est ton besoin niveau ldap ?

    Dans un environnement sécurisé tu ne pourra pas search en anonyme pour vérifier que ton user existe, donc tu doit te bind et connect avec un compte disposant d'assez de droits sur ton ldap.

    Si tu veut juste vérifier un compte actif dans le ldap tu n'as pas de besoin de search tu fait un connect puis un bind avec le compte donné et tu check que tu as les droits.

    En général on se bind avec un compte de service dédié et ensuite effectivement on fait les searchs et on recupère des attributs pour la validation du compte et le lien avec ta base de compte locale.

  13. #13
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 107
    Points : 67
    Points
    67
    Par défaut
    Pour mon cas l’authentification doit se faire au niveau de ldap (donc le bind) et je dois récupérer les informations de l'utilisateur comme le nom, le prenom... (donc le search).
    Je doit ensuite trouver l'utilisateur dans ma base de donnée pour savoir le rôle, si il existe pas il se crée automatiquement avec un rôle par défaut.

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

Discussions similaires

  1. Lenteur à l'ouverture de session hors réseau.
    Par UtOp!K dans le forum Windows XP
    Réponses: 19
    Dernier message: 31/01/2014, 10h41
  2. gestion des sessions et controle
    Par navorinco dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2009, 19h32
  3. Réponses: 1
    Dernier message: 28/04/2008, 15h26
  4. [Cookies] cookie de session pour controle d'accés
    Par Shyboy dans le forum Langage
    Réponses: 1
    Dernier message: 12/04/2007, 08h57
  5. Exécution d'un programme hors session
    Par skywaukers dans le forum Langage
    Réponses: 3
    Dernier message: 07/07/2005, 10h31

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