2009-07-29 5 views
4

Quelle est la meilleure pratique pour l'authentification du site Web utilisateur/REST dans ZV MVC? Comment et où mettre le code dans le cadre ZF? Pouvez-vous me donner un exemple de code?Authentification de l'utilisateur Zend Framework

J'ai un site et un serveur REST écrit dans Zend Framework, mais pas de jet session utilisateur mis en œuvre.

THX!

+0

Vous avez de la chance avec ça? Je suis dans la même situation. –

Répondre

1

L'authentification est configurée dans le _initAutoload du fichier bootstrap, par ex. comme ceci:

if(Zend_Auth::getInstance()->hasIdentity()) { 
    Zend_Registry::set('role', Zend_Auth::getInstance() 
         ->getStorage()->read()->role); 
}else{ 
    Zend_Registry::set('role', 'guests'); 
} 

Dans le cas d'une authentification REST vous devrez peut-être authentifier en passant simplement les paramètres de connexion au lieu de vous connecter via un formulaire.

Il pourrait ressembler à ceci dans votre AuthenticationController:

private function getAuthAdapter() { 
    $authAdapter = new Zend_Auth_Adapter_DbTable(
         Zend_Db_Table::getDefaultAdapter()); 
    $authAdapter->setTableName('users') // the db table where users are stored 
       ->setIdentityColumn('email')      
       ->setCredentialColumn('password') 
       ->setCredentialTreatment('SHA1(CONCAT(?,salt))'); 

    return $authAdapter; 
} 

public function logoutAction() { 
    Zend_Auth::getInstance()->clearIdentity(); 
    $this->_redirect('index/index'); 
} 

public function loginAction(){ 
    if (Zend_Auth::getInstance()->hasIdentity()){ 
     $this->_redirect('index/index'); 
    } 
    if ($request->isPost()){ 
     $username = $request->getPost('username'); 
     $password = $request->getPost('password'); 

     if ($username != "" && $password != "") { 
      $authAdapter = $this->getAuthAdapter(); 
      $authAdapter->setIdentity($username) 
         ->setCredential($password); 
      $auth = Zend_Auth::getInstance(); 
      $result = $auth->authenticate($authAdapter); 

      if($result->isValid()){ 
       $identity = $authAdapter->getResultRowObject(); 
       $authStorage = $auth->getStorage(); 
       $authStorage->write($identity); 
       $this->_redirect ('index/index'); 
      } 
     } 
    } 
} 

Si vous avez besoin de plus d'aide sur zend_auth et zend_acl vous pourriez jeter un oeil à ce how to.