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 :

Démarage de session


Sujet :

Zend_Acl & Zend_Auth PHP

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 282
    Points : 103
    Points
    103
    Par défaut Démarage de session
    Je suis de retour, juste pour comprendre j'ai vu dans les tutos pour démarrer une session je dois mettre dans le fichier d'amorcage :
    Zend_Session::start()
    Si j'ai bien compris cad cela :
    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
    <?php
     
    // Define path to application directory
    defined('APPLICATION_PATH')
        || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
     
    // Define application environment
    defined('APPLICATION_ENV')
        || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
     
    // Ensure library/ is on include_path
    set_include_path(implode(PATH_SEPARATOR, array(
        realpath(APPLICATION_PATH . '/../library'),
        get_include_path(),
    )));
     
    /** Zend_Application */
    require_once 'Zend/Application.php';
     
    // Create application, bootstrap, and run
    $application = new Zend_Application(
        APPLICATION_ENV,
        APPLICATION_PATH . '/configs/application.ini'
    );
     
    /** Démarrer ma session*/
    Zend_Session::start();
     
    $application->bootstrap()
                ->run();
    Ce que je souhaites d'obtenir c'est que après l'authentification je peux naviguer sur des pages. Sinon ou la session arrive fin le système me redérige vers la page d'authentification.

    Pour ce cas dois-je ajouter une function "preDispatch()" dans indexController ou dans AuthController? je signale que c'est la première que j'utilise Zend et c'est la premiere fois que je me noie dans POO.

    Merci d'avance.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Pour moi voila comment je fait.
    Se que j'ai fais. dans mon controleur auth, quand le connecté est valid je demare ma session puis je la crée ma session ensuite je verifie dans un plugins.
    exemple
    AuthController
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if ($result->isValid()) 
    {   
           $Admin_Session = new Zend_Session_Namespace('Admin_Session');						   
     
           $Admin_Session->admin_id = $results->admin_id;
    }
    Mon Plugin
    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
     
    $Admin_Session = new Zend_Session_Namespace('Admin_Session');
     
    $module 	= $request->getModuleName();
    $controller = $request->getControllerName();
    $action     = $request->getActionName();
     
    if (isset($Admin_Session->admin_id))
    {
    	$ctrlName = $request->getControllerName();
    	if ($controller == "auth" && $action != "logout") $this->_response->setRedirect('/');
    }
    else 
    {
    	if ($controller != "auth")
    	{
    		$this->_response->setRedirect('/auth');
    	}
     
    }
    Et maintenat je n'utilise plus les session je fais mon teste avec Zend_Auth

    mon controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if ($result->isValid()) 
    {   
    	//pour recuperer le ID si vous voulez travaillez avec.
    	$storage = $auth->getStorage();					
    		$storage->write($authAdapter->getResultRowObject(array('user_id', 'email')));
     
    	$this->_redirect("/");
    }
    mon plugin
    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
     
    $module 	= $request->getModuleName();
    $controller = $request->getControllerName();
    $action     = $request->getActionName();
     
    $auth = Zend_Auth::getInstance();
    if ($auth->hasIdentity()) 
    {
    	if ($controller == "auth" && $action != "logout") $this->_response->setRedirect('/');
    } 
    else 
    {
    	if ($controller != "auth")
    	{ 
    		$this->_response->setRedirect('/auth');
    	}
     
    }
    Je dirai que la 2eme methode est meilleur que la premier.
    Et si vous n'avez pas compris quelque chose t'a qu'a demandé
    A la recherche d'un film : http://chercher-un-film.com

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 282
    Points : 103
    Points
    103
    Par défaut
    J'optes pour la deuxieme solution.

    voila mon code : AuthController.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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    <?php
     
    class AuthController extends Zend_Controller_Action
    {
     
        public function init()
        {        
                    $this->initView();
    		Zend_Loader::loadClass('Zend_Auth');
    		$this->view->baseUrl = $this->_request->getBaseUrl();
    		$this->view->user = Zend_Auth::getInstance()->getIdentity();
        }
     
        public function indexAction()
        {
            //$this->_redirect('/');
            $form = new Application_Form_Login();
            $request = $this->getRequest();
            if ($request->isPost()) {
                if ($form->isValid($request->getPost())) {
     
                    if ($this->_process($form->getValues())) {
     
                        $this->_helper->redirector('index', 'contact');
                    }
                }
            }
            $this->view->form = $form;
        }
     
        protected function _process($values)
        {
            // Get our authentication adapter and check credentials
            $adapter = $this->_getAuthAdapter();
            $adapter->setIdentity($values['username']); 
            $adapter->setCredential($values['password']);
     
            $auth = Zend_Auth::getInstance();
            $result = $auth->authenticate($adapter);
            if ($result->isValid()) {
                $user = $adapter->getResultRowObject();
                $auth->getStorage()->write($user);
     
     
    	$this->_redirect("/");
     
     
     
                return true;
            }
            return false;
        }
     
        protected function _getAuthAdapter() {
     
            $dbAdapter = Zend_Db_Table::getDefaultAdapter();
            $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
     
            $authAdapter->setTableName('users')
                ->setIdentityColumn('username')
                ->setCredentialColumn('password')
                ->setCredentialTreatment('SHA1(CONCAT(?,salt))');
            return $authAdapter;
        }
     
     
     
     
        function logoutAction()
                {
                        Zend_Auth::getInstance()->clearIdentity();
                        $this->_redirect('/');
                }
    }
    Pour le pluging j'ai du mal ou je peux l'inserer.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Le plugin se met dans le dossier plugins du mçeme niveau que les controllers et les modele et les views

    et tu l'appele dans le bootstrap

    Voila l'exemple d'un plugin
    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 Application_Plugin_MyAuth extends Zend_Controller_Plugin_Abstract	
    {
    	private $_auth;
     
    	public function __construct()	
    	{
    		$this->_auth = Zend_Auth::getInstance();
    	}
     
    	public function preDispatch(Zend_Controller_Request_Abstract $request)	
    	{
    		$module 	= $request->getModuleName();
    		$controller = $request->getControllerName();
    		$action     = $request->getActionName();
     
    		if ($this->_auth->hasIdentity()) 
    		{
    			$ctrlName = $request->getControllerName();
    			if ($controller == "login" && $action != "logout") $this->_response->setRedirect('/');
    		} 
    		else 
    		{
    			if ($controller != "login")
    			{
    				$this->_response->setRedirect('/login');
    			}
     
    		}
    	}
    }
    Et l'initialisation dans le bootstrap
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
     
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
    	protected function _initPlugins()
    	{
    		$registry = Zend_Registry::getInstance();
     
    		$front = Zend_Controller_Front::getInstance();
    		$front->registerPlugin(new Application_Plugin_MyAuth());	
    	}
    }
    A la recherche d'un film : http://chercher-un-film.com

  5. #5
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 282
    Points : 103
    Points
    103
    Par défaut
    Merci pour cet éclaircissement donc je dois retenir que je peux créer mes classes dite plugin et le mettre dans un dossier plugins qui doit se trouver dans le repertoire application et démarrer ce plugin dans le bootstrap.

    Pour mon cas j'arrive à me connecter/déconnecter via un système d'authentification mais une fois déconnecter normalement je ne dois pas accéder à quelque fichier cad au niveau du navigateur qd je tapes le chemin du fichier normalemet je dois etre rediriger faire la page d'authentification mais ce qui se passe la page s'exécute.

Discussions similaires

  1. [Servlets - JSP] Problème de session
    Par the java lover dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 28/11/2011, 09h54
  2. [JSP][session] perte de session et sendRedirect
    Par blaz dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 30/03/2007, 09h32
  3. Réponses: 12
    Dernier message: 24/09/2003, 15h26
  4. [XMLRAD] session
    Par jml dans le forum XMLRAD
    Réponses: 4
    Dernier message: 17/12/2002, 09h24

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