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

Zend_Acl & Zend_Auth PHP Discussion :

Référence vers zend_auth


Sujet :

Zend_Acl & Zend_Auth PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut Référence vers zend_auth
    Bonjour.

    Je suis un tuto pour mettre en place zend_auth + zend_acl.
    Mon formulaire d'identification est en place, ainsi que la session....

    Dans mon controller Auth je gère l'authentification

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class AuthController extends Zend_Controller_Action 
    { 
    function loginAction() {
     // do the authentication 
                    $auth = Zend_Auth::getInstance();
                    $result = $auth->authenticate($authAdapter);
                    if ($result->isValid()) { .....
    }
    }
    }
    A un moment donné on me demande de faire ceci pour initialiser le plugin dans le bootstrap

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # // $auth est une référence vers Zend_Auth (getInstance())   
    $front->registerPlugin(new My_Controller_Plugin_Auth($auth, $acl)) ;
    $acl est défini comme ci-après (OK)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $acl_ini = '../application/acl.ini' ;
    $acl = new My_Acl_Ini($acl_ini) ;
    Par contre comment faire une référence vers Zend_auth pour définir $auth?

    Merci par avance.

  2. #2
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    C'est écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // $auth est une référence vers Zend_Auth (getInstance())
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $auth = Zend_Auth::getInstance();

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    Citation Envoyé par Alshten Voir le message
    C'est écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // $auth est une référence vers Zend_Auth (getInstance())
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $auth = Zend_Auth::getInstance();

    J'avais tenté cela, mais ca me génère une erreur.
    j'avais donc supposé que je devais me tromper à cet endroit la.

    Catchable fatal error: Argument 1 passed to My_Controller_Plugin_Auth::__construct() must be an instance of Zend_Acl, instance of Zend_Auth given, called in C:\wamp\www\zend_auth\application\bootstrap.php on line 36 and defined in C:\wamp\www\zend_auth\library\My\Controller\Plugin\Auth.php on line 37

  4. #4
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par masseur Voir le message
    J'avais tenté cela, mais ca me génère une erreur.
    j'avais donc supposé que je devais me tromper à cet endroit la.
    Tu peux nous montrer le code de ton plugin ?
    (surtout le constructeur)

  5. #5
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    Tu n'aurais pas tout simplement inversé l'ordre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $front->registerPlugin(new My_Controller_Plugin_Auth($acl, $auth)) ;
    Sinon est-ce que tu peux mettre le code de ton plugin et de la class My_Acl_Ini (ou un lien vers ton tuto).

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    Citation Envoyé par Alshten Voir le message
    Tu n'aurais pas tout simplement inversé l'ordre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $front->registerPlugin(new My_Controller_Plugin_Auth($acl, $auth)) ;
    Sinon est-ce que tu peux mettre le code de ton plugin et de la class My_Acl_Ini (ou un lien vers ton tuto).
    http://www.wowww.ch/index.php?post/2...th-et-Zend-Acl

    Pour eusebe ->

    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
    class My_Controller_Plugin_Auth extends Zend_Controller_Plugin_Abstract	{
    	/**
    	 * @var Zend_Auth instance 
    	 */
    	private $_auth;
     
    	/**
    	 * @var Zend_Acl instance 
    	 */
    	private $_acl;
     
    	/**
    	 * Chemin de redirection lors de l'échec d'authentification
    	 */
    	const FAIL_AUTH_MODULE     = 'default';
    	const FAIL_AUTH_ACTION     = 'index';
    	const FAIL_AUTH_CONTROLLER = 'account';
     
    	/**
    	 * Chemin de redirection lors de l'échec de contrôle des privilèges
    	 */
    	const FAIL_ACL_MODULE     = 'default';
    	const FAIL_ACL_ACTION     = 'privileges';
    	const FAIL_ACL_CONTROLLER = 'error';
     
    	/**
    	 * Constructeur
    	 */
    	public function __construct(Zend_Acl $acl)	{
        $this->_acl  = $acl ;
        $this->_auth = Zend_Auth::getInstance() ;
    	}
    EDIT : ca ressemble bien à une inversion de $acl et $auth

  7. #7
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    Citation Envoyé par masseur Voir le message
    EDIT : ca ressemble bien à une inversion de $acl et $auth
    En fait tu n'a qu'un seul paramètre à passer (qui est $acl) vu que ton constructeur ne prend qu'un paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $front->registerPlugin(new My_Controller_Plugin_Auth($acl)) ;
    Même pas besoin de faire un Zend_Auth::getInstance(); vu qu'il est déjà fait dans le contructeur.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    En effet cela va mieux.

    Par contre encore une erreur (uniquement quand je me loggue avec un bon login et mdp).

    Catchable fatal error: Argument 1 passed to Zend_Auth::authenticate() must be an instance of Zend_Auth_Adapter_Interface, instance of Zend_Auth given, called in C:\wamp\www\zend_auth\library\My\Controller\Plugin\Auth.php on line 52 and defined in C:\wamp\ZendFramework-1.7.2\library\Zend\Auth.php on line 115
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function preDispatch(Zend_Controller_Request_Abstract $request)	{
    		if (!$this->_auth->hasIdentity())	{
    			$role = 'guest' ;
    		} else {
    ligne52    	$role = $this->_auth->authenticate()->getIdentity() ;
        	$role = $role['role'] ;
    		}
    Merci et désolé par avance

  9. #9
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    A mon avis le problème vient plutôt de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $auth->authenticate($authAdapter);
    Dans l'action Login du contrôleur AuthController (que tu as mis plus haut). Tu n'as pas intialisé $authAdapter.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    Citation Envoyé par Alshten Voir le message
    A mon avis le problème vient plutôt de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $auth->authenticate($authAdapter);
    Dans l'action Login du contrôleur AuthController (que tu as mis plus haut). Tu n'as pas intialisé $authAdapter.
    A priori si.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     Zend_Loader::loadClass('Zend_Auth_Adapter_DbTable');
                    $db = Zend_Registry::get('db');
                    $authAdapter = new Zend_Auth_Adapter_DbTable($db);
                    $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);

  11. #11
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    La fonction authenticate nécessite en paramètre un adaptateur (Zend_Auth_Adapter_Interface).

    Or tu n'en fournis pas... : $role = $this->_auth->authenticate()

    Mais pourquoi utilises-tu authenticate() à cet endroit là ?
    (dans la fonction preDispatch de ton plugin)

    Le seul endroit où ça devrait être fait, c'est dans ton action d'authentification...

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    Citation Envoyé par Eusebe Voir le message
    La fonction authenticate nécessite en paramètre un adaptateur (Zend_Auth_Adapter_Interface).

    Or tu n'en fournis pas... : $role = $this->_auth->authenticate()

    Mais pourquoi utilises-tu authenticate() à cet endroit là ?
    (dans la fonction preDispatch de ton plugin)

    Le seul endroit où ça devrait être fait, c'est dans ton action d'authentification...
    j'aime bien comprendre, par des exemples, donc si je comprends bien, c'est pour vérifier les autorisations.

    Si il n'est pas identifié, il s'agit d'un 'guest' et sinon on récupère son role d'ou le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $role = $this->_auth->authenticate()->getIdentity() ;
        	$role = $role['role'] ;
    Mais peux être je me trompe dans la façon de récupérer le rôle.

  13. #13
    Membre expérimenté Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (!$this->_auth->hasIdentity())	{
    	$role = 'guest' ;
    } else {
    	$role = $this->_auth->authenticate()->getIdentity() ;
    	$role = $role['role'] ;
    }
    Surtout qu'avec ton if ça signifie que tu ne fais un authenticate que si l'utilisateur est déjà connecté...

    En fait il faudrait faire simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $role = $this->_auth->getIdentity();
    Mais il faut bien définir un rôle à l'utilisateur lors de l'authentification pour que ce plugin marche.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    En fait à la base c'était cela.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!$this->_auth->isIdentified())	{
    Donc si je comprends bien, faut coder cette fonction isIdentified() et lui faire retourner true si on est connecté et false dans le cas inverse.

    Et pour le rôle il est stoqué dans la bdd, donc une fois identifié il faut aller recup le role du couple login et pass.

    Comment fait on cela vu que je m'y prends mal?

    Merci

  15. #15
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    +1 avec Alshten.

    La fonction authenticate() sert à authentifier (vérifier à partir d'un login / mot de passe que ton utilisateur existe bien et récupérer un certain nombre d'infos).

    Quand tu fais $this->_auth->hasIdentity(), tu vérifies si l'utilisateur est identifié (=> s'il s'est authentifié). Dans ce cas, il est inutile de le 'ré-authentifier'.

    Avec $this->_auth->getIdentity() tu peux en effet récupérer son identité.

    Si tu regardes le tuto sur lequel tu travailles, ils utilisent les données stockées avec Zend_Auth pour récupérer le rôle de l'utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $user = $this->_auth->getStorage()->read() ;  
    $role = $user['role'] ;

  16. #16
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par masseur Voir le message
    En fait à la base c'était cela.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!$this->_auth->isIdentified())	{
    Donc si je comprends bien, faut coder cette fonction isIdentified() et lui faire retourner true si on est connecté et false dans le cas inverse.

    Et pour le rôle il est stoqué dans la bdd, donc une fois identifié il faut aller recup le role du couple login et pass.

    Comment fait on cela vu que je m'y prends mal?

    Merci
    La méthode isIdentified() existe déjà, c'est une méthode de Zend_Auth
    Et elle renvoie déjà true si l'utilisateur est authentifié.

    Pour le rôle, il faut le récupérer dans ton action login et le stocker avec Zend_Auth...

    Un exemple dans un tuto de ce site (http://r-benyacoub.developpez.com/tu...ethodes#LIII-A) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $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);
        $this->_redirect('/');
    } else {
        // failure: clear database row from session
        $this->view->message = 'Login failed.';
    }

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    Désolé de vous ennuyer mais d'avoir procéder comme cela je progresse et comprends mieux.

    Par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call to undefined method Zend_Auth::isIdentified()
    Version 1.7 du Framework.
    Etrange et pas de trace dans la doc

  18. #18
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par masseur Voir le message
    Désolé de vous ennuyer mais d'avoir procéder comme cela je progresse et comprends mieux.

    Par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call to undefined method Zend_Auth::isIdentified()
    Version 1.7 du Framework.
    Etrange et pas de trace dans la doc
    Au temps pour moi, je pensais à hasIdentity()

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    Bon ben j'arrive pas à m'y faire.

    Je suis mal parti dès le début j'ai l'impression.

    Si quelqu'un savait ou trouver un exemple minimal avec (formulaire d'authentification avec recup dans bdd + redirection selon les droits)

    Je suis preneur.

    Merci sinon tant pis.

  20. #20
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Tu as regardé le tuto que je t'avais indiqué ?
    http://r-benyacoub.developpez.com/tu...?page=sommaire

    Si ça ne fonctionne plus avec les nouvelles versions du framework, merci de le signaler

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/04/2008, 16h07
  2. [JSTL] références vers le site de sun
    Par nikalkal dans le forum Taglibs
    Réponses: 7
    Dernier message: 17/12/2007, 15h38
  3. Garder une référence vers une variable d'une autre classe
    Par choupeo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 08/12/2007, 18h30
  4. Utilisations croisés de références vers des dll
    Par Pilloutou dans le forum Framework .NET
    Réponses: 3
    Dernier message: 05/11/2006, 21h56
  5. Comment stocker une référence vers un TTreeNode ds un DFM ?
    Par phplive dans le forum Composants VCL
    Réponses: 1
    Dernier message: 19/07/2005, 12h33

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