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

Langage PHP Discussion :

Classe authentification, structure ?


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 462
    Points
    462
    Par défaut Classe authentification, structure ?
    Bonjour,

    Je suis en train de créer une classe permettant de gérer les questions d'authentification. Par principe, je pourrais utiliser soit un framework, soit une classe déjà existante. Mon choix est d'en créeer une simple que je ferai évoluer avec le temps.

    J'ai trouvé un bon exemple ici.

    Ma méthode de login, qui prend un utilisateur et mot de passe fonctionne correctement, mais.... il y a un hic :
    - le nom de la table et des champs interrogés dans la requête SQL sont codés en dur,ce que j'aimerai éviter puisque insuffisamment flexible.

    Pour les paramètres spécifiques à l'environnement, le tout est dans un fichier XML de config qui est hors de mon repo, la structure :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="UTF-8"?>
    <Config>
    	<Path>/var/www/.../nom_du_projet/</Path>
    	<Db>
    		<Host>localhost</Host>
    		<Port>1234</Port>
    		<User>mon_user</User>
    		<Password>motdepasse</Password>
    		<Dbname>ma_bdd</Dbname>
    	</Db>
    </Config>
    Jusque là tout va bien. Est-ce problématique si j'ajoute une structure de ce type dans le fichier de configuration ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <Auth>
        <Table></Table>
            <Fields>
                <Field>Champ_bdd1<Field>
                <Field>Champ_bdd2</Field>
                ....
            </Fields>
    </Auth>
    C'est un draft, l'idée est de centraliser les informations. Au premier abord, il ne me semble pas cohérent de mettre de type d'infos dans un fichier de conf. Ces données seraient probablement mieux placés dans le constructeur d'une classe.

    Pour ma part, j'arrive pas à retranscrire le fait que l’authentification peut prendre plusieurs tables et champs en paramètre. La solution est-elle de faire passe un array ? Si tel est le cas, les clés créées doivent être identiques entre ce qu'attend ma classe et ce qui est passé en paramètre.
    Exprimer une différence d'opinion vaut mieux que :

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    Par défaut
    Je suis partisan de minimiser les configs à faire.
    Pour ton cas , ce que j'ai fait dans ma classe d'authentification c'est définir les champs dans des attributs de la classe et de laisser la possibilité de les changer via un setters.
    Dans 90% des cas , la table des utilisateurs s'appelle users , le champs de l'identifiant s'appel login , et le mot de passe password. Du coup je considère ça comme ma configuration de base et si j'ai besoin de changer je fait en dure dans le code quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $auth = new Auth($sess);
    $auth->setUserTable('utilisateur');
    $auth->setUserField('identifiant');
    $auth->setPwdField('motdepasse');
    Ce sont pour moi des paramètres qui ne concerne pas l'utilisateur final et qui vont être défini une unique fois par le développeur , on peut donc les avoir en dur dans un bootstrap par exemple.

    Les fichier xml en fichier de config je suis pas fan. pourquoi ne pas utiliser des formats nativement gérés par php comme ini ou json qui se transforme très facilement en un tableau exploitable ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé Avatar de Aizen64
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 462
    Points
    462
    Par défaut
    J'avais fait une autre méthode en mettant tout dans un array, pour une raison que je n'explique pas trop, j'ai dû faire une modif au code et n'ai pas été en mesure de récupérer certains paramètres.

    J'ai refait l'équivalent en utilisant du XML et ça ne m'a pas posé problème. Et puis XML est un format répandu pour le coup.

    Le champ de login n'a pas toujours le même nom dans une BDD, obligé de faire avec un schéma existant, je ne l'ai pas créé la base.

    Question qui n'est pas du troll : il y a des dev qui apprécient le langage ? C'est le bordel pour trouver des fonctions et elles ne sont pas rassemblées. Normal, PHP est procédural et n'a pas été réorganisé en classes par la suite. Le débug est fastidieux au possible. Les points d'arrêt et le débug pas à pas n'arriveront probablement jamais.

    A côté C# ou Java sont bien plus simples à débugger.

    Pour moi utiliser PHP ressemble à une corvée plus qu'autre chose.

    Merci pour ta réponse.
    Exprimer une différence d'opinion vaut mieux que :

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par Aizen64 Voir le message
    J'ai refait l'équivalent en utilisant du XML et ça ne m'a pas posé problème. Et puis XML est un format répandu pour le coup.
    Bah oui mais quel est l"intérêt ? Si pour chaque classe utilisée tu dois préalablement parser un fichier xml tu perds du temps inutilement. Pourquoi ne pas initialiser la classe directement depuis php ?

    Citation Envoyé par Aizen64 Voir le message
    Question qui n'est pas du troll : il y a des dev qui apprécient le langage ? C'est le bordel pour trouver des fonctions et elles ne sont pas rassemblées ... Le débug est fastidieux au possible. Les points d'arrêt et le débug pas à pas n'arriveront probablement jamais.
    On dit cependant que php est le langage web le plus facile à apprendre même sans notions de programmation. Ce n'est donc pas la doc ni les tutos qui doivent manquer...

    Pour faire des points d'arrêt de débugage tu peux faire un basique exit. Pour une gestion plus fine des erreurs tu peux faire une recherche google sur "gestion des erreurs php" ou "gestion des exceptions php" ou encore "affichage des erreurs php" et tu trouveras de bonnes réponses en premières lignes. On peut pas dire que la doc php soit inaccessible... Si tu trouve php compliqué c'est que tu es novice dans ce langage mais si tu t'investis un minimum tu progresseras vite

    Citation Envoyé par Aizen64 Voir le message
    PHP est procédural et n'a pas été réorganisé en classes par la suite.
    Il y a de plus en plus de classes disponibles. Mais ils ont commencés par l'essentiel et quand cela apportait quelque chose. Par exemple la classe dateTime ou encore la lib SPL

  5. #5
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Citation Envoyé par Aizen64 Voir le message
    Question qui n'est pas du troll : il y a des dev qui apprécient le langage ?
    Tu prends pour exemples des codes qui n'exploitent même pas PSR-0 et composer pour éviter de créer des autoloaders...

    Alors, comment dire : Continue de travailler sans framework. Surtout, ne prend pas le moindre composant existant et tu as toutes les chances d'être au contact des bonnes pratiques qui t'éviteront des prises de têtes

    Le débug est fastidieux au possible. Les points d'arrêt et le débug pas à pas n'arriveront probablement jamais.
    Avec Netbean et xdebug, ça fonctionne plutôt bien...

    Pour moi utiliser PHP ressemble à une corvée plus qu'autre chose.
    Je dirais la même chose si j'essayais de faire les applications que je développe en PHP avec Symfony2 en JAVA avec les seules servlet et JSP. Si tu prends les bons outils, tu trouveras des ressemblances entre Symfony2 et Spring; entre Silex et JAX-RS...

    Mon conseil :
    - Respecte la convention PSR-0 et apprend à te servir de composer (~maven en Java, ~npm pour NodeJS)
    - Apprend à utiliser des bibliothèques "modernes" proprement (Exemple : Monolog ou encore Silex)

    EDIT : Pour faire le tour de l'existant dans les bons exemples : Packagist

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Citation Envoyé par Aizen64 Voir le message
    il y a des dev qui apprécient le langage ? C'est le bordel pour trouver des fonctions et elles ne sont pas rassemblées. Normal, PHP est procédural et n'a pas été réorganisé en classes par la suite.
    Et ne le sera jamais. PHP n'a pas de paradigme dominant. Mais un peu de pratique et la consultation de la doc suffit en général pour trouver les bonnes fonctions. Mais en règle générale, on n'utilise qu'une petite partie des fonctions disponibles. Le reste, on a des bibliothèques de plus haut niveau.


    Citation Envoyé par Aizen64 Voir le message
    Le débug est fastidieux au possible. Les points d'arrêt et le débug pas à pas n'arriveront probablement jamais.
    XDebug et un bon IDE. Il faut utiliser les bons outils :-) Ne me dis pas que tu débogues à coups d'échos et de var_dump...

    Citation Envoyé par Aizen64 Voir le message
    Pour moi utiliser PHP ressemble à une corvée plus qu'autre chose.
    Comme dis plus haut, c'est parce que tu a cru qu'un bon exemple de code PHP est une bibliothèque avec une God Class ayant des méthodes spaghetti de 60 lignes, des dizaines d'ifs, un require dans le constructeur (!!!), un autre require dans une méthode, un "die" dans le constructeur, (!!!) une dizaine de return par méthode, ignorant allègrement le SRP, incluant des bibliothèques externes, sans autoloading, sans composer, utilisant un générateur pseudo-aléatoire complètement non-aléatoire


    Sans compter cette perle, pour une méthode utilisée à de nombreuses reprises:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private function checkCaptcha($captcha)
        {
            return true;
        }
    PHP est un langage qui n'oblige pas à coder proprement, il n'y a pas de fil d'Ariane pour guider le développeur, si le développeur fait n'importe quoi...

    Ceci dit, oui, PHP a de problèmes, certains sérieux et frustrants :-)

    Regarde plutôt Aura.auth, Sentinel ou Gatekeeper pour des bibliothèques stand alone, hors framework.

Discussions similaires

  1. Organisation d'un programme (Class et Structures)
    Par le_binr dans le forum VB.NET
    Réponses: 3
    Dernier message: 16/12/2011, 11h12
  2. Classes authentification et session
    Par kanzarih dans le forum Langage
    Réponses: 1
    Dernier message: 22/07/2009, 11h04
  3. Classe ou structure ?
    Par tintin72 dans le forum Débuter
    Réponses: 9
    Dernier message: 20/11/2008, 20h26
  4. Réponses: 6
    Dernier message: 26/06/2006, 11h29
  5. [Sécurité] Recherche classes authentification
    Par php_de_travers dans le forum Langage
    Réponses: 7
    Dernier message: 11/05/2006, 17h04

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