Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 03-10-2007 21:06:56

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Zend_auth et la gestion de profil

Salut à tous

Le système d'authentification de ZF à l'avantage de la simplicité
mais souvent ce qui détermine l'accès à une ressource ce n'est pas l'identité de l'utilisateur mais le profil qui a dans l'application.
si vous avez une relation un utilisateur à un profil vous pouvez enbarquer votre profil directement dans l'authentification. vous avez surpement un bout de code qui resemble à

Code:

    Zend_Loader::loadClass('Zend_Auth_Adapter_DbTable'); 
    $dbAdapter = Zend_Registry::get('dbAdapter'); 
    $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter); 
    $authAdapter->setTableName('users'); 
    $authAdapter->setIdentityColumn('username'); 
    $authAdapter->setCredentialColumn('password'); 
    // Set the input credential values to authenticate against 
    $authAdapter->setIdentity($username); 
    $authAdapter->setCredential($password); 
    // do the authentication 
    $auth = Zend_Auth::getInstance(); 
    $result = $auth->authenticate($authAdapter); 
    if ($result->isValid()) { 
     // success: store database row to auth's storage 
     // system. (Not the password though!) 
     $data = $authAdapter->getResultRowObject(null, 'password'); 
     $auth->getStorage()->write($data); 
..

ce qui nous intéresse c'est la ligne
    $authAdapter->setTableName('users');
créez une vue dans votre base ainsi

Code:

CREATE VIEW auth_user AS 
SELECT *
FROM user
INNER JOIN profil USING (prf_id);

Je vous laisse deviner la structure des tables
remplacez     $authAdapter->setTableName('users');  par
    $authAdapter->setTableName('auth_user');
Vous avez maintenant dans les donnez d'authentification le user et son profil.

si comme moi un utilisateur peut avoir plusieurs profil vous devez après le login lui proposer la liste de ses profil pour en choisir un. une fois qu'il l'a choisit vous pouvez intéger ces information dans le données d'authentification

Code:

$auth = zend_Auth::getInstance()->getStorage();
$userData = $auth ->read();
foreach ($profile as $key => $value){ //$profile est le profil choisit par l'utilisateur.
   $userData->$key = $value;
}
$auth ->write($userData);

là encore vous avez dans les données d'authentification l'ensemble des information  nécessaire.

A+JYT

Hors ligne

 

#2 04-10-2007 16:52:03

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Zend_auth et la gestion de profil

Si tu décides d'écrire des tutoriaux, je me ferais un plaisir de faire pointer quelques liens dessus smile
Merci pour les infos, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 12-10-2007 10:54:09

andras
Membre
Date d'inscription: 26-09-2007
Messages: 11

Re: Zend_auth et la gestion de profil

Bonjour,
je débute en ZF et j'essaie de comprendre comment marche l'authentification à partir du tuto de Rob Allen qui ressemble au code du premier post de ce fil.
est-ce que le storage par defaut qu'on a avec $auth->getStorage() est une "vraie session" ?
j'ai essayé de faire un getId() dessus mais ça me retourne une erreur. Si ce n'est pas une session, comment faire pour créer une session à partir de cette procédure d'authentification ?
Mon besoin est bien sûr de conserver la session pour les requetes suivantes du même utilisateur.
je n'ai pas trouvé de lien dans la doc entre ce getStorage() et les Zend_Session

Hors ligne

 

#4 12-10-2007 11:33:38

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Zend_auth et la gestion de profil

Cela utilise bien une Zend_Session.

Code:

$this->user = Zend_Auth::getInstance()->getIdentity();

Ca a mettre dans un controller et le tour est joué., tu à acces au donnée récupéré lors du 

Code:

    $data = $authAdapter->getResultRowObject(null, 'password'); 
     $auth->getStorage()->write($data);

Hors ligne

 

#5 12-10-2007 14:23:50

andras
Membre
Date d'inscription: 26-09-2007
Messages: 11

Re: Zend_auth et la gestion de profil

Mr.MoOx a écrit:

Cela utilise bien une Zend_Session.

ok mais le code suivant ne marche pas

Code:

$sid = Zend_Auth::getInstance()->getStorage()->getId();

j'ai l'erreur : Fatal error: Call to undefined method Zend_Auth_Storage_Session::getId()

Comment peut-on récuperer l'id de cette session ?

Edit : je peux le récupérer avec la fonction PHP session_id() mais j'aurais aimé coder cela en ZF...

Dernière modification par andras (12-10-2007 14:33:03)

Hors ligne

 

#6 15-10-2007 10:59:01

andras
Membre
Date d'inscription: 26-09-2007
Messages: 11

Re: Zend_auth et la gestion de profil

Arès avoir relu la doc de ZF, j'en conclu que Zend_Auth::getInstance()->getStorage() renvoie un objet de type Zend_Auth_Storage_Session qui n'est pas une Zend_Session : on ne peut donc pas récupérer l'Id de la session qui a été crée sauf en utilisant directement la fonction PHP session_id().

mais effectivement on n'a pas logiquement besoin d'accéder directement à la session elle-même.

Pour stocker les infos du user on fait $auth->getStorage()->write($data);
et pour les récupérer dans une page suivante on fait : Zend_Auth::getInstance()->getIdentity();

ce n'est pas très intuitif (en tout cas pour moi) car on ne passe pas par les mêmes objets pour lire et écrire les données de session mais bon, c'est comme ça.

Hors ligne

 

#7 20-11-2007 15:26:18

Lo-chan
Nouveau membre
Date d'inscription: 12-11-2007
Messages: 6

Re: Zend_auth et la gestion de profil

andras a écrit:

j'en conclu que Zend_Auth::getInstance()->getStorage() renvoie un objet de type Zend_Auth_Storage_Session qui n'est pas une Zend_Session

J'ai cru comprendre ça aussi.

Dans ce cas, comment peut-on faire en sorte d'utiliser une vrai session ? Je ne trouve pas que la doc soit bien faite sur ce point, il me manque pas mal d'éléments.

De plus, est-il possible de passer d'un objet Zend_Auth_Storage_Session à un objet Zend_Session_Namespace et inversement ? Je m'explique : après m'être connecter sur un LDAP, je souhaite passer les paramètres dans une session. Pour le moment, juste avant l'authentification à proprement dit,  j'utilise :

Code:

$userInfoSession = new Zend_Auth_Storage_Session('userInfoSession');
$auth->setStorage($userInfoSession);

Et après la connexion, je souhaite mettre certaines infos comme un "username" en session. J'utilise donc :

Code:

$userInfoSession->username = $resultLdap->getIdentity();

Ca fonctionne sur la vue en cours, mais si je change de page, il ne me récupère plus les infos. Je pense que ca vient du fait que je n'utilise pas une vrai session. Quelle solution peut-être utilisée ? Existe-t-il un vrai tutorial sur le package Zend_Session ?

Hors ligne

 

#8 04-01-2010 00:40:59

mymt
Membre
Lieu: PACA
Date d'inscription: 25-09-2009
Messages: 93

Re: Zend_auth et la gestion de profil

Lo-chan,
Si tu as trouvé la solution à ton problème, je crois que ça pourrait résoudre le mien..
merci!

Hors ligne

 

#9 04-01-2010 09:09:49

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Zend_auth et la gestion de profil

je ne comprends pas quel est le problème
la session est gérée par Zend_Session
Zend_Auth gère l'authentification

A+jyt

Hors ligne

 

#10 05-04-2010 15:14:06

ptitjib
Membre
Date d'inscription: 03-12-2009
Messages: 10

Re: Zend_auth et la gestion de profil

Bonjour,
Avec print_r($_SESSION), ne peut t'on pas voir comment Zend_Auth gère la persistance ?

Hors ligne

 

#11 05-04-2010 19:44:33

3uclide
Membre
Date d'inscription: 09-08-2008
Messages: 194

Re: Zend_auth et la gestion de profil

Lo-chan a écrit:

andras a écrit:

j'en conclu que Zend_Auth::getInstance()->getStorage() renvoie un objet de type Zend_Auth_Storage_Session qui n'est pas une Zend_Session

J'ai cru comprendre ça aussi.

Dans ce cas, comment peut-on faire en sorte d'utiliser une vrai session ? Je ne trouve pas que la doc soit bien faite sur ce point, il me manque pas mal d'éléments.

De plus, est-il possible de passer d'un objet Zend_Auth_Storage_Session à un objet Zend_Session_Namespace et inversement ? Je m'explique : après m'être connecter sur un LDAP, je souhaite passer les paramètres dans une session. Pour le moment, juste avant l'authentification à proprement dit,  j'utilise :

Code:

$userInfoSession = new Zend_Auth_Storage_Session('userInfoSession');
$auth->setStorage($userInfoSession);

Et après la connexion, je souhaite mettre certaines infos comme un "username" en session. J'utilise donc :

Code:

$userInfoSession->username = $resultLdap->getIdentity();

Ca fonctionne sur la vue en cours, mais si je change de page, il ne me récupère plus les infos. Je pense que ca vient du fait que je n'utilise pas une vrai session. Quelle solution peut-être utilisée ? Existe-t-il un vrai tutorial sur le package Zend_Session ?

Cette ligne écrit les infos dans la session

Code:

$auth->getStorage()->write($data);

oui si tu fais print_r($_SESSION); tu verras comment la session est géré par zend.

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