Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 03-01-2010 17:04:57

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

[Résolu]Session sécurisée

Bonjour à tous,
Je poste un message car je ne trouve pas de réponse ailleurs. Je vais tenter de donner toutes les infos afin de pouvoir solliciter au mieux votre aide.

Je veux faire une identification utilisateur via un BDD. J'ai un code en place, et l'identification se passe bien puisse que ma redirection conditionnelle se fait comme attendu. J'ai également un helper qui m'affiche le nom de l'utilisateur connecté.

Mais dès que je change d'action ou de controller je perds l'authentification... je n'arrive pas à comprendre d'ou ça peut venir. En glanant des infos à gauche ou à droite, je me dis que ça pourrait venir de la façon dont je définis mes sessions... est-ce le cas??

Pour mes sessions, j'ai créé un plugin :

Code:

<?php
class Controller_Plugins_Session extends Zend_Controller_Plugin_Abstract
{
private $_session;
private $_clientHeaders;

public function __construct()
{
$this->_session = Zend_Registry::get('session');
$this-> _clientHeaders = $_SERVER['HTTP_USER_AGENT'];
if (array_key_exists('HTTP_ACCEPT', $_SERVER)){
    $this->_clientHeaders .= $_SERVER['HTTP_ACCEPT'];
    }
    $this->_clientHeaders=md5($this->clientHeaders);
}

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
if(Zend_Auth::getInstance()->hadIdentity()){
    if($this->_session->clientBrowser != $this->_clientHeaders){
        Zend_Session::destroy();
        $this->_response->setHttpResponseCode(403);
        $this->_response->clearBody();
        $this->_response->sendResponse();
        exit;
    }
}
}

public function dispatchLoopShutdown()
{
$this->_session->requestUli = $this->getRequest()->getRequestUri();
$this->_session->clientBrowser=$this->_clientHeaders;
}

}

Du côté de mon bootstrap voilà ce qu'il y a :

Code:

$configSession = new Zend_Config_Ini($confPath .'/session.ini', 'dev');

// ************************* SESSION ***********************************
// Configuration de la session (impérativement avant son démarrage)
Zend_Session::setOptions($configSession->toArray());
Zend_Session::setOptions(array('save_path' => $appPath . $configSession->save_path));
// Partage (et création ou restauration) de l'objet de session dans le registre
// Ce premier appel à new Zend_Session_Namespace démarre la session PHP
Zend_Registry::set('session', $session = new Zend_Session_Namespace($configSession->name));

 
...
// register plugin
$frontController->registerPlugin(new Ozerise_Controller_Plugins_Sessions);

Merci pour votre aide...

Dernière modification par mymt (21-01-2010 13:14:15)

Hors ligne

 

#2 03-01-2010 17:27:48

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

Re: [Résolu]Session sécurisée

Petite question.. lorsqu'une session démarre, je devrais voir des fichiers dans mon répertoire application/tmp non?? parce que là je ne vois rien s'inscrire...

Hors ligne

 

#3 03-01-2010 17:38:19

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

Re: [Résolu]Session sécurisée

première erreur corrigée... le nom de ma classe n'était pas correcte dans le plugin..
J'ai donc le fichier qui est créé dans mon répertoire... mais pour le moment ça ne marche toujours pas pour conserver mon identification

Dernière modification par mymt (03-01-2010 18:02:27)

Hors ligne

 

#4 03-01-2010 18:26:28

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

Re: [Résolu]Session sécurisée

j'utilise ça pour mettre l'identité de mon utilisateur dans la session
$data c'est l'objet contenant l'identité (issue de la base DB Ldap etc)

Code:

            $auth = Zend_Auth::getInstance();
            $auth->getStorage()->write($data);

pour toute les actions je fais

Code:

                $user = Zend_Auth::getInstance()->getIdentity();
                if ($user)
                {
                    $this->user = clone($user);
                    $this->view->user = clone($user);
                    if(isset($user->profile)) {
                        $this->user->profile = clone($user->profile);
                        $this->view->user->profile = clone($user->profile);
                    }
                }

dans le prédispatch je fais

Code:

                if (!$this->_isAuthorized(false)&&!$this->_isLogged(false)) {
                    // On va le connecter automatiquement et enchainer la procÈdure standard
                    $returnPath=strtolower($this->makeActionPath());
                    $this->_redirect('/login/auth/?returnPath='.$returnPath);
                }

la méthode _isAuthorized vérifie que l'utilisateur à le droit de faire l'action
la méthode _isLogged

Code:

    protected function _isLogged($alert=false)
    {
        $logged = true;
        $auth = Zend_Auth::getInstance();
        if (!$auth || !$auth->hasIdentity()) {
            if ($alert) {
                $this->_messenger->addWarning("Veuillez vous identifier avant de poursuivre.");
            }
            $logged = false;
        }
        return $logged;
    }

A+JYT

Hors ligne

 

#5 03-01-2010 19:01:59

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

Re: [Résolu]Session sécurisée

Alors de mon côté je fais ça pour enregistrer les data... est correct??

Code:

$authAdapter = new Zend_Auth_Adapter_DbTable ( Zend_Db_Table::getDefaultAdapter () );
        $authAdapter->setTableName ( 'Tabonne' )
        ->setIdentityColumn ( 'pseudo' )
        ->setCredentialColumn ( 'password' )
        ->setCredentialTreatment ( 'MD5(?)' )
        ->setIdentity ( $login )
        ->setCredential ( $password );
...

$storage = Zend_Auth::getInstance ()->getStorage ();
$storage->write ( $authAdapter->getResultRowObject ( null, 'password' ) );

Hors ligne

 

#6 03-01-2010 19:34:45

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

Re: [Résolu]Session sécurisée

J'ai pas tout compris de ce que tu fais dans ton predispatch...
My god.. c'est pas simple de démarrer avec ce framework!!

Hors ligne

 

#7 03-01-2010 19:47:07

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

Re: [Résolu]Session sécurisée

D'ailleurs, après m'être authentifié, mon fichier de session n'est pas updaté (si je regarde la date et l'heure du fichier en ftp)... ca c'est pas logique.. n'y devrait il pas y avoir une mise à jour pour l'identification??... ou est ce que c'est gardé du côté client?

Hors ligne

 

#8 03-01-2010 20:48:49

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

Re: [Résolu]Session sécurisée

non c'est gardé cote serveur
et oui le fichier devrait être mis à jour

dans le predispatch je vérifie que l'utilisateur à le droit de faire l'action demandé ci ce n'est pas le cas il est renvoyez vers la page de login avec en paramètre l'url de l'action demandé ainsi si l'utilisateur n'est pas logé où s'il n'a pas les droit il va sur la page de login. soit il se loge (ou se reloge avec un nouveau rôle) et l'action sera de nouveau invoqué soit il annule et revient à l'action précédente

A+JYT

Hors ligne

 

#9 03-01-2010 23:07:42

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

Re: [Résolu]Session sécurisée

Désolé de revenir à la charge... je rame toujours!
Est-ce que "théoriquement" mon code, à savoir

Code:

$authAdapter = new Zend_Auth_Adapter_DbTable ( Zend_Db_Table::getDefaultAdapter () );
        $authAdapter->setTableName ( 'Tabonne' )
        ->setIdentityColumn ( 'pseudo' )
        ->setCredentialColumn ( 'password' )
        ->setCredentialTreatment ( 'MD5(?)' )
        ->setIdentity ( $login )
        ->setCredential ( $password );
...

$storage = Zend_Auth::getInstance ()->getStorage ();
$storage->write ( $authAdapter->getResultRowObject ( null, 'password' ) );

devrait permettre la mise à jour de la session avec les paramètres en question? Comment relire de façon simple le contenue du fichier session? Car vraissemblablement c'est la que se situe l'os : les paramètres d'authentification en sont pas sauvé...

Hors ligne

 

#10 03-01-2010 23:32:14

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

Re: [Résolu]Session sécurisée

En fait je viens de faire un pas à pas avec les fichiers de sessions créés... il semblerait qu'au moment où je me log, je tue la session.. en tout cas le fichier est supprimé... reste à comprendre pourquoi..

J'ai rajouté deux trois lignes de code en plus :

Code:

//récupération de l'espace de stockage             
            $auth = Zend_Auth::getInstance ();
            $storage = Zend_Auth::getInstance ()->getStorage ();
            //$storage->write ( $authAdapter->getResultRowObject ( null, 'password' ) );
            $data = $authAdapter->getResultRowObject(null, 'member_password');
 
echo print_r($data); echo "<br><br>";
$auth->getStorage()->write($data);
echo print_r($auth->getStorage()->read());

Ca me permet de vérifier ce que je vais écrire et ce qui a été effectivement écrit... alors bonne nouvelle ce que j'écris correspond bien à ce que je veux.

Mais une fois que je choisis une autre action, lorsque je refais un read sur le getStorage, et bien ça me pond seulement un "1" à la place de mon objet détaillé. Je comprends pas comment je perds l'info.. est-ce que ça viendrait du bootstrap?? Et puis comment se fait-il que je perds aussi mon fichier de session?? Je désepsère!!

Dernière modification par mymt (04-01-2010 00:24:22)

Hors ligne

 

#11 04-01-2010 01:16:07

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

Re: [Résolu]Session sécurisée

Alors pour la petite histoire c'est mon plugin sessions qui sème la zone... si je le vire et repasse en comportement standard alors ca marche... je vais devoir le debuguer!

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