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 Framework PHP Discussion :

[ZF2.2] authentification HTTP


Sujet :

Zend Framework PHP

  1. #1
    Membre �prouv�
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 50
    Localisation : France, Loz�re (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Billets dans le blog
    1
    Par d�faut [ZF2.2] authentification HTTP
    Bonjour les amis,
    Je d�bute en Zend (mais pas en PHP) j'ai r�ussi a moiti� � mettre une authentification dans un controller d'un module, le probl�me, c'est que quand je cliques sur 'annuler' on acc�de quand m�me � la page 'prot�g�e'
    Voici mon source :
    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
    <?php
    namespace Nimda\Controller;
     
    use Zend\Authentication\Adapter\Http;
    use Zend\Authentication\Adapter\Http\FileResolver;
    use Zend\Mvc\Controller\AbstractActionController;
    use Zend\View\Model\ViewModel;
    /**
     * Description of NimdaController
     * Controlleur du module Nimda
     *
     * @author pj
     */
    class NimdaController extends AbstractActionController {
     
     
        public function indexAction() {
            $this->login();
        }
     
        public function testAction() {
     
        }
     
       private function login() {
             $config=array(
                'accept_schemes'=>'basic digest',
                'realm'=>'AdministrHMDtion',
                'digest_domains'=>'/admin',
                'nonce_timeout'=>3600
            );
            $adapter=new Http($config);
            //
            $basicResolver=new FileResolver();
            $basicResolver->setFile(__DIR__.'/password');
     
            $digestResolver=new FileResolver();
            $digestResolver->setFile(__DIR__.'/password');
     
            $adapter->setBasicResolver($basicResolver);
            $adapter->setDigestResolver($digestResolver);
     
            $request=$this->getRequest();
            $response=$this->getResponse();
            /*
            assert($request instanceof Zend\Http\Request);
            assert($response instanceof Zend\Http\Response);
            */
            $adapter->setRequest($request);
            $adapter->setResponse($response);
     
            $result=$adapter->authenticate();
            if(!$result->isValid()) {
            $response->setContent('<h1>Bad Motherfucker !</h1>');
            }
     
       }
    }
     
    ?>
    Comment faire pour que mon fichier index.phtml soit inaccessible depuis mon Controller ?

    j'ai aussi une autre question : la j'ai fait une fonction login() que j'appelle dans indexAction(), j'avais pr�vu d'appeler cette fonction dans toutes mes fonctions 'Action' mais je trouve �a un peu lourd, n'y a t-il pas un autre moyen (pour prot�ger tous le module).
    Merci beaucoup pour vos r�ponses.

  2. #2
    Membre �clair�
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    51
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 51
    Par d�faut
    Pour prot�ger plusieurs modules, controlleurs, actions tu dois faire ca dans ton module.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
     
    public function onBootstrap(MvcEvent $e)
        {
        	//----- events
            $eventManager = $e->getApplication()->getEventManager();
            $eventManager->attach(\Zend\Mvc\MvcEvent::EVENT_ROUTE, array($this, 'onRoute'));
     
        }
     
     /**
         * Redirect to login form if application is private
         * @param unknown_type $e
         */
    	public function onRoute(\Zend\Mvc\MvcEvent $e){
     
            $serviceManager = $e->getApplication()->getServiceManager();
            $request = $e->getRequest();
     
    	    if (!$request instanceof ConsoleRequest){
    	        $config = $serviceManager->get('Config\Appli');
    	        if ( (array_key_exists('private', $config)) && ($config['private'] === true) ) {
    		        $authAdapter = $serviceManager->get('User\AuthenticationService');
    			 	if($authAdapter->hasIdentity() === true){
    		        	// OK
    		        } else {
    			        $routeName = $e->getApplication()->getMvcEvent()->getRouteMatch()->getMatchedRouteName();
    		        	if ($routeName != 'user-auth') {
    			        	$response  = $e->getResponse();
    				        $response->getHeaders()->addHeaderLine('Location', 'auth/login');
    				        $response->setStatusCode(302);
    				        return $response;
    			        }
    		        }
    	        }
    	    }
    	}
    Dans mon cas, je regarde la config.
    Si l'application est en mode priv�e, et que je ne suis pas en mode console alors si je ne suis pas connect�, redirection vers page de login

  3. #3
    Membre �prouv�
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 50
    Localisation : France, Loz�re (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Billets dans le blog
    1
    Par d�faut
    Merci magic bart pour ta r�ponse mais je ne veux que prot�ger un module et j'ai trouv� une solution satisfaisante mais qui ne marche pas encore :
    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
        public function dispatch(\Zend\Stdlib\RequestInterface $request, \Zend\Stdlib\ResponseInterface $response = null) {
            parent::dispatch($request, $response);
            $this->login();
        }
     
       private function login() {
             $config=array(
                'accept_schemes'=>'basic digest',
                'realm'=>'AdministrHMDtion',
                'digest_domains'=>'/admin',
                'nonce_timeout'=>3600
            );
            $adapter=new Http($config);
            //
            $basicResolver=new FileResolver();
            $basicResolver->setFile(__DIR__.'/password');
     
            $digestResolver=new FileResolver();
            $digestResolver->setFile(__DIR__.'/password');
     
            $adapter->setBasicResolver($basicResolver);
            $adapter->setDigestResolver($digestResolver);
     
            $request=$this->getRequest();
            $response=$this->getResponse();
            /*
            assert($request instanceof Zend\Http\Request);
            assert($response instanceof Zend\Http\Response);
            */
            $adapter->setRequest($request);
            $adapter->setResponse($response);
     
            $result=$adapter->authenticate();
            if(!$result->isValid()) {
                // j'aimerais faire une redirection ici
            }
     
       }
    j'aimerais si le r�sultat n'est pas valide, faire une redirection, seulement mon objet $response ne comporte que peu de m�thode (setContent setMetadata) je ne sais pas si je peux effectuer une redirection en utilisant une de ses m�thodes.

    Merci

  4. #4
    Membre �clair�
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    51
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 51
    Par d�faut
    Ce n'�tait qu'un exemple apr�s tu l'adapte en fonction de tes besoins, je pense qu'a partir de l'object $request tu peux r�cup�rer le module.

Discussions similaires

  1. [C# 2.0] Authentification HTTPS
    Par murlock dans le forum Windows Forms
    R�ponses: 3
    Dernier message: 31/10/2007, 07h12
  2. Authentification HTTP sur 2 serveurs
    Par mecha dans le forum Apache
    R�ponses: 5
    Dernier message: 23/06/2006, 17h21
  3. probleme authentification http
    Par Langly dans le forum Apache
    R�ponses: 2
    Dernier message: 23/06/2006, 14h39
  4. R�ponses: 10
    Dernier message: 06/12/2005, 12h23

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