Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 20-11-2012 01:35:30

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Authentification avec pseudo OU email

Bonjour,

Je débute avec la version 2 de Zend Framework, et je me pose plusieurs questions (peut-être devrais-je créer un nouveau sujet pour chaque question distincte ?) sur celui-ci.

J'aimerais faire un système d'authentification avec Zend_Auth (ça n'a pas beaucoup changé de ZF1, mais je ne m'étais jamais posé la question avant tongue) avec en IdentityColumn le pseudo de l'utilisateur OU son email.
L'utilisateur doit pour se connecter, soit entrer son pseudo/password, soit entrer email/password.

J'ai vu des sites qui proposaient ce genre de chose, que je trouve bien pratique, et j'aimerais en faire autant.

C'est possible de faire ça avec Zend_Auth ?

Merci de bien vouloir m'aider ! big_smile

Hors ligne

 

#2 20-11-2012 09:24:04

J0r
Membre
Date d'inscription: 27-04-2012
Messages: 57

Re: Authentification avec pseudo OU email

Dans ta table qui contient les utilisateurs, tu créés un champs "LOGIN" ou tu mets sois le login, soit l'email et ça marche et c'est ce champ qui sera l'identity.

Hors ligne

 

#3 20-11-2012 13:14:39

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: Authentification avec pseudo OU email

Hum.. je ne pense pas que ce soit la bonne solution. J'aimerais quand même garder les champs "email" et "pseudo" dans ma base de données, car chacun d'eux me servirons pour autre chose.
C'est l'utilisateur qui entre le login de son choix lorsqu'il se connecte (son email ou son pseudo), je ne connais pas son choix à l'avance.

La requête que je voudrais générer avec Zend_Auth, c'est quelque chose comme :

Code:

 [lang=sql]SELECT *
FROM user
WHERE (email = '$login' OR pseudo = '$login')
AND password = '$password'

Hors ligne

 

#4 20-11-2012 14:07:35

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Authentification avec pseudo OU email

Salut alors déjà juste une petite précision, les composants du ZF2 sont plus nommés pareil à la place de Zend_Auth ça serait Zend\Auth.

Ensuite tu as déjà un module qui gère ce genre de chose : ZfcUser (je te laisse le chercher sur github il est dans le repo de zf-commons (modules officiels)). Celui-ci permet de faire l'un ou l'autre ou les deux.

Tu as donc le choix d'utiliser ce module ou de regarder comment c'est fait pour en reproduire une partie chez toi smile

Hors ligne

 

#5 20-11-2012 17:05:00

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: Authentification avec pseudo OU email

Merci ! big_smile
Encore une petite question : Dans ZF1, lorsque je créais de nouvelles classes, je le mettais dans le dossier library/My/. Dans ZF2, pour que ce soit correct, où devrais-je mettre ces nouvelles classes ? Et comment les ajouter ?

Hors ligne

 

#6 20-11-2012 17:09:58

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Authentification avec pseudo OU email

Généralement dans ton module avec un nom de dossier en rapport avec le type de la classe si c'est un service dans un dossier service etc ...

Hors ligne

 

#7 20-11-2012 17:24:10

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Authentification avec pseudo OU email

Seryus a écrit:

La requête que je voudrais générer avec Zend_Auth, c'est quelque chose comme :

Code:

 [lang=sql]SELECT *
FROM user
WHERE (email = '$login' OR pseudo = '$login')
AND password = '$password'

Sachant qu'un email ou un pseudo devrait à priori être unique dans ta table, fais plutôt cela

Code:

SELECT *
FROM user
WHERE email = '$login' OR pseudo = '$login'

Et après tu checkes le mot de passe avec PHP. C'est bien plus économique en terme de charge sur la base de données.

Orkin a écrit:

Généralement dans ton module avec un nom de dossier en rapport avec le type de la classe si c'est un service dans un dossier service etc ...

On parle de quoi là ?
Parce que la partie modèle, les "surcharges de Zend"... n'ont à priori rien à faire dans le module.


22914720

Hors ligne

 

#8 20-11-2012 18:36:59

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Authentification avec pseudo OU email

On parle de création de nouvelle classes comme des services, des adapters, des factory etc ... Et si les surcharge des classes de Zend ou doctrine peuvent être dans le module. Si on souhaite modifier l'adapter pour l'authentification de doctrine on peut tout à fait créer un dossier Authentification\Adapter\MonAdapter.

Les modules ZF2 n'ont pas le même sens que ceux de ZF1 après il est tout à fait possible de faire un module "MesSurcharges" et tout mettre dedans mais c'est un peu fouilli. Si on a un module qui gère l'authentification autant mettre les surcharges dedans.

Hors ligne

 

#9 21-11-2012 01:40:13

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: Authentification avec pseudo OU email

Ça me parait bizarre aussi de mettre ça dans un module, pour moi ça serait plutôt une librairie nécessaire à toute l'application mais bon hmm

J'ai créé mon nouvel Adapter qui étend de Zend\Authentication\Adapter et je l'ai placé dans le dossier module\ My\Authentication\Adapter, mais je n'arrive pas à y accéder depuis mes autres modules.
Comment faire ? sad

Si on doit mettre ça dans un module, j'aimerais faire un module "My" qui contiendra toutes les nouvelles classes en respectant l'architecture de ZF2. Ça me fait venir à la question : comment accéder à un module, à partir d'un autre module (avec les namespaces) ?

Dernière modification par Seryus (21-11-2012 01:40:58)

Hors ligne

 

#10 21-11-2012 10:10:33

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Authentification avec pseudo OU email

Non c'est pas bizarre de mettre ça dans un modules. On en avait pas mal discuté avec Bakura sur le possibilité de faire des modules ultra générique qui peuvent être détachés ou ajoutés à l'application sans impact et c'est presque mission impossible. Il faut mettre en place beaucoup d'abstraction et c'est loin d'être le plus simple donc au final tu verras que dans ton application (mis à part ce que tu met dans le dossier vendor) tous tes modules auront des dépendances à d'autre modules de ton application et au final tu ne pourras que très rarement les dissocier. Donc dans ce cas les modules vont plutôt servir à séparer ton code proprement en fonction de ce qu'il va faire.

Si on en revient à ton cas, tu peux tout à faire créer un module Common qui va contenir des classes qui sont nécessaire dans tous tes modules, ça fait plus propre que d'avoir des customs un peu partout. Il faut un peu oublier les habitudes du ZF1 qui permettait justement de mettre ses customs dans un dossier de librairie custom avec des préfix My etc ... Au final le système d'un module Common revient au même la seule différence c'est que ça respecte l'architecture des applications ZF2.
Il est donc normal que ton adapter ne soit pas accessible partout puisqu'il ne respecte pas l'architecture du ZF2, ça ne peut donc pas fonctionner. Il faut donc faire comme tu le préconises un module My (bien que je préfère l'appeler Common mais le résultat sera le même) qui respect l'architecture d'un module ZF2.
Et ensuite il suffit d'utiliser les namespaces et tout fonctionnera smile

Hors ligne

 

#11 21-11-2012 12:57:25

J0r
Membre
Date d'inscription: 27-04-2012
Messages: 57

Re: Authentification avec pseudo OU email

Seryus a écrit:

Hum.. je ne pense pas que ce soit la bonne solution. J'aimerais quand même garder les champs "email" et "pseudo" dans ma base de données, car chacun d'eux me servirons pour autre chose.
C'est l'utilisateur qui entre le login de son choix lorsqu'il se connecte (son email ou son pseudo), je ne connais pas son choix à l'avance.

La requête que je voudrais générer avec Zend_Auth, c'est quelque chose comme :

Code:

 [lang=sql]SELECT *
FROM user
WHERE (email = '$login' OR pseudo = '$login')
AND password = '$password'

Et si un personne à deux comptes avec la même adresse email, tu fais comment ?

Hors ligne

 

#12 21-11-2012 14:09:50

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Authentification avec pseudo OU email

J0r a écrit:

Et si un personne à deux comptes avec la même adresse email, tu fais comment ?

Normalement c'est pas censé arriver sinon l'authentification par email ne peux pas fonctionner. Et la demande était de pouvoir se connecter avec le login OU l'email donc si on stocke dans le login l'email ou le login en fonction de ce que l'utilisateur saisi il ne pourra pas choisir l'un ou l'autre lors de sa connexion mais bien celui qu'il a renseigné à l'inscription.

Donc la solution de Bouks est selon moi la meilleure en partant bien évidemment du principe qu'un seul compte n'est autorisé par email.

Hors ligne

 

#13 22-11-2012 14:56:20

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: Authentification avec pseudo OU email

J0r a écrit:

Et si un personne à deux comptes avec la même adresse email, tu fais comment ?

Et si une personne à deux comptes avec le même pseudo, je fais comment ? Évidemment, un seul compte par adresse email. Si j'autoriserais plusieurs compte par email, ça n'aurait aucune utilité (à part polluer ma BDD de comptes inactifs).

J'ai modifié l'adapter de Zend\Auth pour que la fonction setIdentityColumn puisse accepter un array en paramètre et ça fonctionne très bien wink
Par contre,  pour le moment j'ai modifié la librairie officielle qui se trouvait dans le dossier "vendor", ce qui n'est pas très propre (et je pense que si je met à jour la library, ça supprimera ce que j'ai fait). C'est pourquoi je cherche (encore) à pouvoir le mettre dans un module à part.

Orkin a écrit:

Non c'est pas bizarre de mettre ça dans un modules. On en avait pas mal discuté avec Bakura sur le possibilité de faire des modules ultra générique qui peuvent être détachés ou ajoutés à l'application sans impact et c'est presque mission impossible.

J'ai quelques petites idées concernant celà, le module devrait pouvoir se détacher et s'attacher sans avoir besoin de modifier l'application. Évidemment, ça aurait un impact sur celle-ci, si le module ne changerait rien, à quoi ça servirait de le mettre ? tongue

Hors ligne

 

#14 22-11-2012 15:03:59

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Authentification avec pseudo OU email

Seryus a écrit:

J'ai modifié l'adapter de Zend\Auth ...

Surcharge la classe tout simplement.


22914720

Hors ligne

 

#15 22-11-2012 15:35:32

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Authentification avec pseudo OU email

Seryus a écrit:

Et si une personne à deux comptes avec le même pseudo, je fais comment ?

C'est pareil que pour le mail tu peux brider les pseudos pour éviter les doublons. Là de toute façon tu n'as pas trop le choix si tu veux permettre ce système il faut que les contraintes sur les mails soient les mêmes sur les logins/pseudo


Seryus a écrit:

J'ai quelques petites idées concernant celà, le module devrait pouvoir se détacher et s'attacher sans avoir besoin de modifier l'application. Évidemment, ça aurait un impact sur celle-ci, si le module ne changerait rien, à quoi ça servirait de le mettre ? tongue

En fait c'est surtout pour que ton application fonctionne si elle ne l'a pas. Par exemple tu veux configurer la configuration à un serveur smtp (ou à plusieurs) tu peux éventuellement le faire dans ce module. Et les utiliser dans le module qui va gérer les mails. Après c'est une question de choix ^^.

Hors ligne

 

#16 22-11-2012 16:48:53

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: Authentification avec pseudo OU email

Ça y est, j'ai réussi à mettre ma surcharge de la classe Zend\Authentication\Adapter\DbTable dans un module big_smile Je me suis basé sur le module ZfcUser pour l'architecture, merci pour votre aide ! wink

En passant, il n'y aurait pas un module HTMLpurifier pour ZF2 ?

Je vais essayer de faire une gestion des modules maintenant, pour me permettre d'activer ou de désactiver les modules par interface graphique, sans devoir modifier à chaque fois le fichier config\application.config.php smile

Hors ligne

 

#17 22-11-2012 17:07:39

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Authentification avec pseudo OU email

Hmm ça me parait compliqué de faire ça sans modifier le fichier application.config.php

Qu'est ce que tu appelles HTMLpurifier ?

Hors ligne

 

#18 22-11-2012 17:41:14

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: Authentification avec pseudo OU email

HTMLpurifier qui permet de sécuriser (filtrer, etc) les formulaires tout en permettant l'utilisation du HTML dans ceux-ci, la documentation officielle en parle ici.

Pour le fichier application.config.php, je pensais remplacer le tableau des modules par une fonction, qui irait lire dans le dossier module, pour avoir la liste, et regarder si ceux-ci sont actifs (peut être avec un fichier spécifique qui serait le dossier de chaque module, ou dans le fichier Module.php lui même). Cette fonction retournerait un tableau avec seulement les modules actifs.

Ça me parait compliqué aussi, certains modules ne devraient pas pouvoir être désactivé (comme le module de gestion des modules, ou le module Application), et puis je ne vois pas trop comment faire pour inclure la fonction du module dans application.config.php, mais je vais y réfléchir smile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages