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

Plugins PHP Discussion :

Identifier un user par son login ou son email


Sujet :

Plugins PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Identifier un user par son login ou son email
    Bonjour a tous
    Je viens de recuperer un site qui marche en partie sous symfony et une autre partie sous un autre framework...

    Je debut franchement avec symfony et je commence doucement a comprendre le fonctionnement.

    Ma boite veux qu un utilisateur puisse se loger aussi bien en utilisant son email ou son pseudo.

    Premiere partie faire la mise a jour du template pour faire ca propre dans
    /Symfony/apps/frontend/modules/sfGuardAuth/templates/_signin.php
    Ca pas de souci

    Par contre quel fichier dois je modifier pour faire la jonction entre la table sf_guard_user et sf_guard_user_profile pour permettre une authentification aussi bien par email que par login.

    Merci d avance pour tous tuyaux possibles car la je pedale dans la choucroute

  2. #2
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Si tu récupères un site c'est que tu dois jongler avec d'anciennes version de sfGuard et sfFDAP. Quels sont les versions des plugins ?

    Le mieux serait de passer aux dernière version. Une recherche dans la salle devrait te permettre de trouver un message récent où nous avons débattu de l’authentification par l'adresse email tu devrais y trouver un bon début de piste. Sauf que ceci était sur les dernières version des plugins.

    Attention, les différences entre sfGuard v4 et v5 sont substantielles et touchent à la base de données. Il n'est donc pas possible de passer de l'un à l'autre simplement.

    En fonction de ton code, des évolutions (des autres) à apporter, il pourrait être plus intéressant de taper directement dans le code du plugin.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Si tu récupères un site c'est que tu dois jongler avec d'anciennes version de sfGuard et sfFDAP. Quels sont les versions des plugins ?
    Voila bien le probleme, le site a ete dev sur un serveur ou symphony était installé et ils sont tout betement copier coller les fichiers sur un serveur de prod. J ai donc meme pas accès a des fonctionnalités telles que symfony -v pour connaitre deja ma version de symfony !!

    Existe t il une méthode pour connaitre les versions de mes modules en sachant qu il n y a meme pas de backoffice

    Citation Envoyé par Michel Rotta
    Le mieux serait de passer aux dernière version. Une recherche dans la salle devrait te permettre de trouver un message récent où nous avons débattu de l’authentification par l'adresse email tu devrais y trouver un bon début de piste. Sauf que ceci était sur les dernières version des plugins.
    Il y a eu des dev dessus et je me pose la compatibilité des nouvelles versions . Car je pense etre sur une ancienne au vu du code et des lectures que je trouve sur justement différents forums

    Citation Envoyé par Michel Rotta
    Attention, les différences entre sfGuard v4 et v5 sont substantielles et touchent à la base de données. Il n'est donc pas possible de passer de l'un à l'autre simplement.
    Et en plus de garantir la compatibilité avec le reste !!!

    Citation Envoyé par Michel Rotta
    En fonction de ton code, des évolutions (des autres) à apporter, il pourrait être plus intéressant de taper directement dans le code du plugin.
    Je pense en effet faire ca a la warrior et ca sera surement pas propre.
    Je pensais rajouter une fonction dans le script qui verifierai si deja ce que l on m envoie dans le champs est un email et si c est le cas d aller faire la verification direct dans la base, puis je rappelle les focntions standart pour creer proprement l objet user ..

    C est faisable d apres vous?

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Voila bien le probleme, le site a ete dev sur un serveur ou symphony était installé et ils sont tout betement copier coller les fichiers sur un serveur de prod. J ai donc meme pas accès a des fonctionnalités telles que symfony -v pour connaitre deja ma version de symfony !!

    Existe t il une méthode pour connaitre les versions de mes modules en sachant qu il n y a meme pas de backoffice
    Si copié collé a fonctionné dans un sens, il peut aussi le faire dans le sens inverse.

    Installe toi un LAMP ou un XAMP sur ton poste et récupère le site. Dans tous les cas il est indispensable de modifier en local avant d'envisager de toucher à la partie public...

    Le backend n'est qu'une application comme une autre, l'avoir ou ne pas l'avoir ne va rien changer.

    Il y a eu des dev dessus et je me pose la compatibilité des nouvelles versions . Car je pense etre sur une ancienne au vu du code et des lectures que je trouve sur justement différents forums
    Tu as trois possibilités :
    • Développé en 1.0. C'est la pire des possibilités. Un code où tu trouveras peu d'aide et un ORM propel avec peu de spécialiste ici. Tu peux envisager de porter en 1.3 avec le module de compatibilité sans trop de problèmes ni de retouche.
    • Développé en 1.1 avec du code 1.0. Même chose que si dessus.
    • Développé en 1.2 tu dois pouvoir passer en 1.4 sans problèmes particuliers


    Et en plus de garantir la compatibilité avec le reste !!!
    C'est une question qu'il faudra se poser. Mais je crois que sfGuard 4 prévoyait déjà une authentification par l'email. Je crains que ce ne soit que par un ou exclisif.

    Je pense en effet faire ca a la warrior et ca sera surement pas propre.
    Je pensais rajouter une fonction dans le script qui verifierai si deja ce que l on m envoie dans le champs est un email et si c est le cas d aller faire la verification direct dans la base, puis je rappelle les focntions standart pour creer proprement l objet user ..

    C est faisable d apres vous?
    Faisable, oui certainement. Simple, pas nécessairement. Résistant pour que la prochaine modification ne casse pas tous, plus difficile à faire.

    Je me méfierai d'un test qui cherche à deviner si l'entrée est un nom ou un email, il reste possible que cela soit les deux (une personne pourrait avoir un username qui a la forme d'une adresse email.

    De plus, l'idée de la vérification est l'unicité d'un identifiant combiné avec un passe. Dans le cas d'une recherche sur deux champs, on cour le risque (improbable, mais Murphy peut faire des miracles) que deux personnes différentes aie pour une un username: titi avec un email titi@toto.truc et la deuxième aie comme username: titi@toto.truc et comme email titi@tutu.truc. Comment distinguer les deux ? La probabilité que les mots de passes soient identique est infime, mais comme dit Murphy : "un miracle est toujours possible". Sans compter que distinguer deux enregistrements possible uniquement sur le password est un début de trou de sécurité que je ne serais pas prêt à prendre.

    Reste alors la seul possibilité, la création d'une table annexe à celle des utilisateurs avec quatre champs : id, user_id, type (email ou username) et texte (l'email ou le username). Chaque utilisateur à deux entrées (une pour l'email, une pour le username. La table à un index unique sur texte. Donc on peut garantir l'unicité et on peut retrouver l'id du user a vérifier.

    Cette modification est une lourde réécriture de sfGuard que ce soit la v4 où la v5. Sans compter la gestion du validateur qui va vérifier l’existence des deux sur la table annexe. Et des bizarrerie du genre du gugus qui veut le même username et le même email, qui, lui, doit être autorisé !

    Faisable ? Oui, on peut tout faire (ou presque). Simple ? Non. Rapide ? Non.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Si copié collé a fonctionné dans un sens, il peut aussi le faire dans le sens inverse.
    A part que j ai plus acces a ce serveur de dev !!

    Je vais donc faire comme tu dis monter un lamp pour faire mes tests (j avais deja ca en place)

    La question que je me pose, c est dans ce cas si j installe synfony via pear est ce que je vais avoir une modification des sources? un upgrade a t il eu lieu a ce moment la?

    Désolé de toutes ces questions mais je suis pas un expert synfony

  6. #6
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Récupère le symfony existant avant d'envisager un upgrade.

    Non, il n'y a pas de modification automatique des sources, juste une avalanche éventuel de messages d'horreurs ! (heu d'erreurs)
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    bon pemiere nouvelle, dans la prod j ai bien un symfony 1.4.3,

    en faite dans la preprod ils n ont pas mis les fichiers lib/vendor/symfony/data/bin/symfony

    Maintenant je cherche pour connaitre les versions des modules et je poste a la suite

    A noté que le site tourne avec propel et non doctrine

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Bon alors voila les news
    j utilise donc sfguard 4.01 avec propel
    et dedans on a pas la fameuse fonction pour s authentifier soit par mail soit par login disponible dans la version 5 avec doctrine

    soit je passe sous doctrine mais le hic c est que j ai tout a passé dessus et le site tourne avec orm propel et je sais pas ce que ca peux impacter sur le site

    Soit je patch le site a la warrior

    une idée?

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Apres quelques recherche je confirme que la migration vers doctrine n est pas faisable ca demande de refaire les requetes

  10. #10
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Passer sur doctrine demande presque de réécrire 60% du code non symfony !

    Non, il faut rester avec propel. Et développer ton propre fork de sfGuard.

    Et penser à ce que j'ai indiqué plus haut qui ne va pas simplifier l'analyse !

    Attend la prochaine avancée d'ici 1 an et tu pourras passer à doctrine 2 et Symfony2. Une autre réécriture total !
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    ok donc je vais carrement modifé la classe pluginsfguarduserpeer
    sur la fonction retrievebyusername.

    Derniere question afin de faire propre avec propel comme je peux aller chercher le username par rapport a l email?

    Je pose la question car je connais pas propel plus que ca voir pas du tout .
    Si c est pas simple j appelle directement mysql mais bon ca fait porcito !!

  12. #12
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Je n'ai plus la syntaxe propel en tête, mais la documentation doit exister largement.

    Si non, tu peux te reporter sur le tutoriel de symfony 1.4 pour propel.

    Pour ta recherche, n'oublie pas ce qui est dis ici dans la fin du message.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    J ai verifié le code avait ete modifié pour que le username ne puisse etre un email et chaque email est bien unique dans la sf_guard_user_profile

    Je donne mon dev a tout le monde pour montrer comment j ai fait
    Attention c est du porcito mais efficace, ce n est pas fait dans les regles de l art a vous d ameliorer
    Fichier /symfony/plugins/sfguardplugin/lib/model/pluginsfguarduserpeer.php


    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
     
    class PluginsfGuardUserPeer extends BasesfGuardUserPeer
    {
      public static function retrieveByUsername($username, $isActive = true)
      {
    // modification du systeme de selection
     $Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#'; 
       if(preg_match($Syntaxe,$username)) 
          {
    	//Connextion a la bdd
    	@mysql_connect('localhost','user_de_la_base','mot_de_passe_base');
     	@mysql_select_db('nom_de_la_base');
    	$query = "select * from sf_guard_user, sf_guard_user_profile where sf_guard_user.id=sf_guard_user_profile.user_id and email='$username' and is_active=1 limit 1";
    	$res = mysql_query($query);
    	while ($val = mysql_fetch_array($res))
    	{
     
    	$username = $val['username'];
    		$c = new Criteria();
        		$c->add(self::USERNAME, $username);
        		$c->add(self::IS_ACTIVE, $isActive);
     
    	}
     
    	mysql_free_result($res);
          } 
       else 
         {
        $c = new Criteria();
        $c->add(self::USERNAME, $username);
        $c->add(self::IS_ACTIVE, $isActive);
     
         }
    return self::doSelectOne($c);
      }
     
    }

  14. #14
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Avec une connection en mysql directe depuis symfony tu vas, au mieux, te faire appeler Albert !

    Tu passes à travers tous les systèmes embarqués de sécurité. Et même pas avec du PDO. Alors que tu as un des meilleurs ORM sous la main.

    Et tu fais ce code absolument non protégé dans la partie connexion, soit une des parties les plus sensible de l'application.

    Bon, je suppose que c'est un essai et que tu vas rectifier le tir.


    Question annexe quid d'un user qui a comme username un nom qui répond à ton regex (en fait qui a mit une adresse email dans le username) ? Jamais il ne peut se connecter ?
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    ha je l ai dit c etait porkito de chez porkito. C est meme limite indescent comme code.

    Evidemment je suis en train de l ameliorer mais vu ma connaissance limité voir meme nulle de propel j ai du faire au mieux avec ce que j avais sous la main. oui je sais c est pas une excuse mais des fois on fait comme on peut.

    Ca marche maintenant j ai plus qu a l amelioré dès que j aurai une meilleur connaissance de propel et symfony, ca ne fait que 2 semaines que je decouvre ce systeme

    Pour le coup de l utilisateur qui a un email en login ca se peut pas il l avait bloqué dans le formulaire d inscription ce que j avoue me sauve dans ce cas la sinon j etais dans la merde

  16. #16
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Pour le coup de l'email filtré en nom d'utilisateur, comme dirait un de mes profs : "mouai" qui voulait dire beaucoup de choses et essentiellement, Murphy va se régaler !

    Pour propel, il faut en gros une journée pour comprendre comment récupérer ce que tu veux, faire le code et l'implémenter... Regarde dans jobeetjob version propel, tu y as toutes les informations nécessaires.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/08/2013, 10h06
  2. Réponses: 0
    Dernier message: 16/09/2008, 15h26
  3. Réponses: 2
    Dernier message: 22/01/2008, 21h03
  4. [DOM] récupération d'une balise par la valeur de son attribut
    Par slyfer dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 10/11/2007, 13h50
  5. indentifacation d'un client par son numero et son code
    Par abdou karim diagne dans le forum C
    Réponses: 3
    Dernier message: 19/03/2007, 09h20

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