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] Création d'un module d'authentification


Sujet :

Zend Framework PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 34
    Points : 32
    Points
    32
    Par défaut [ZF2] Création d'un module d'authentification
    Bonjour,

    Je souhaite passer toutes les applications web de ma société de ZF1 à ZF2.
    Après de longue lecture, j'ai encore quelques difficultés à appréhender la construction d'un module, etc....

    J'ai un besoin spécifique pour toutes ces applications et particulièrement au niveau de l'authentification.

    J'ai tout d'abord créer un nouvel adaptateur d'authentification \MyUser\Authentication\Adapter\DbTable
    et un nouvel adaptateur de stockage \MyUser\Authentication\Storage\Session

    Voici comment cela se présente

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    //Module.php
     
    <?php
    class Module
    {
    	//....
     
        public function getServiceConfig()
        {
            return array(
                'invokables' => array(
                    'MyUser\Form\Login' => 'MyUser\Form\Login',
                    'MyUser\Authentication\Storage\Session' => 'MyUser\Authentication\Storage\Session',
                ),
                'factories' => array(
     
                    'MyUserOptions' => function ($sm) {
                        $config = $sm->get('Config');
                        return new Options\ModuleOptions(isset($config['MyUser']) ? $config['MyUser'] : array());
                    },
     
                    'MyUserAuthStorage' => function($sm) {
                        $options = $sm->get('MyUserOptions');
                        return new \MyUser\Authentication\Storage\Session('sdauth');
                    },
     
                    'MyUserAuthService' => function ($sm) {
                        $dbAdapter = $sm->get('bigdataSdv1');
                        $authAdapter = new \MyUser\Authentication\Adapter\DbTable($dbAdapter, 'utilisateurs', 'login', 'password', '?');
                        //$authAdapter = new \Zend\Authentication\Adapter\DbTable($dbAdapter, 'utilisateurs', 'login', 'password', '?');
     
                        $authService = new \Zend\Authentication\AuthenticationService();
                        $authService->setAdapter($authAdapter);
                        $authService->setStorage($sm->get('MyUserAuthStorage'));
     
                        return $authService;
                    },
                ),
            );
        }
     
        public function getViewHelperConfig()
        {
            return array(
                'factories' => array(
                    'MyUserDisplayName' => function ($sm) {
                        $locator = $sm->getServiceLocator();
                        $viewHelper = new View\Helper\MyUserDisplayName;
                        $viewHelper->setAuthService($locator->get('MyUserAuthService'));
                        return $viewHelper;
                    },
                ),
            );
        }
     
        public function onBootstrap(MvcEvent $e)
        {
            $em = $e->getApplication()->getEventManager();
     
            //Check Authentication
            $em->attach('route', array($this, 'checkAuthenticated'));
     
            //Override Layout
            //$em->getSharedManager()->attach('Zend\Mvc\Controller\AbstractController', 'dispatch', array($this, 'overrideLayout'), 100);
            $em->attach('dispatch', array($this, 'overrideLayout'));
        }
     
        /**
         * Override layout for action "login" and "logout"
         * @param MvcEvent $e
         */
        public function overrideLayout(MvcEvent $e)
        {
            //$controller = $e->getTarget();
            //$controllerClass = get_class($controller);
            //$moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\'));
     
            $routeMatch = $e->getRouteMatch();
            if ( in_array($routeMatch->getParam('action'), array('login','logout') ) ) {
     
                $controller = $e->getTarget();
                $controller->layout('layout/layout.phtml');
            }
        }
     
        /**
         * Return true if "login" or "logout" Action is open
         * @param MvcEvent $e
         * @return boolean
         */
        public function isOpenRequest(MvcEvent $e)
        {
            $routeMatch = $e->getRouteMatch();
            if ( in_array($routeMatch->getParam('action'), array('login','logout') ) ) {
     
                return true;
            }
     
            return false;
        }
     
        /**
         * Check if the user is authenticated
         * @param MvcEvent $e
         */
        public function checkAuthenticated(MvcEvent $e)
        {
            if ( !$this->isOpenRequest($e) ) {
     
                $sm = $e->getApplication()->getServiceManager();
                if (! $sm->get('MyUserAuthService')->getStorage()->read($sm->get('MyUserAuthService')->getStorage()->getSessionId())) {
                    $e->getRouteMatch()
                        ->setParam('controller', 'MyUser\Controller\User')
                        ->setParam('action', 'login');
                }
            }
        }
     
    }
    A partir de là je pense qu'il y a déjà des choses à améliorer. Mais en plus je souhaiterais pouvoir avoir plusieurs adaptateurs d'authentification et de stockage différents suivant les applications.

    En fonction de la configuration des applications certaines doivent pourvoir se connecter à partir d'une base de données ou à partir d'une api. De même pour le stockage qui peut être uniquement en Session ou en Session + Database.

    Si quelqu'un à des conseils ou des explications pour m'orienter cela serait appréciable.

  2. #2
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 51
    Points : 204
    Points
    204
    Par défaut
    Salut,


    Ja vais juste te donner un exemple concret.
    Dans le cadre d'un de mes projets, j'ai du faire une connexion Ldap pour la dev et classique bdd pour le local

    Pour se faire j'ai déjà un fichier de config par environnement.

    Ensuite en fonction de la config mon service va renvoyer tel ou tel objet :

    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
     
    public function getServiceConfig()
        {
            return array(
                	'factories' => array(
                	'Auth\Config' => function ($sm) {
                        $config = $sm->get('Config');
                        return $config['auth'];
                    },
            		'Auth\AuthAdapter' => function ($sm) {
                   	 	$config = $sm->get('Auth\Config');
             			if (isset($config['adapter']['ldap']['options'])) {
    	       				$class = $config['adapter']['ldap']['class'];
             				return new $class($config['adapter']['ldap']['options']);
    					} else {
    						$class = $config['adapter']['dbTable']['class'];
    						$options = $config['adapter']['dbTable']['options'];
    	                 	return new $class(
    	                		$sm->get('Zend\Db\Adapter\Adapter'), 
    	                		$options['tableName'], 
    	                		$options['identityColumn'],
    	                		$options['credentialColumn'],
    	                		$options['credentialTreatment']
    	                	);
    					}
                    },
     
     
                ),
            );
        }

    Fichier de config de la dev
    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
     
    <?php
    return array(
        'auth' => array(
         	'adapter' => array(
        		'ldap' => array(
        			'options' => array(
        				'server1' => array(
    				    	......
    			    	),
        			)
        		)
        	),
        ),
     
    );

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/12/2014, 14h30
  2. Module d'authentification Apache
    Par webrider dans le forum Apache
    Réponses: 6
    Dernier message: 27/06/2006, 18h20
  3. Cration d'un module de recherche
    Par cyberbiker dans le forum Access
    Réponses: 1
    Dernier message: 16/03/2006, 15h25
  4. module d'authentification & d'autorisation
    Par yanis97 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 26/01/2006, 19h20
  5. [JAAS]Module d'authentification
    Par yanis97 dans le forum Sécurité
    Réponses: 3
    Dernier message: 10/07/2005, 19h20

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