Opinioni sistema di login

CIao a tutti,

nella quasi totalità degli esempi trovati su internet, il login su zend framework avviene in 2 action separate:

1) una loginAction mostra il form

2) una processAction processa le informazioni ricevute

Ora, io mi chiedo, questo approccio è veramente conveniente? Sono un po' 'ceppone' io oppure in questo modo non è possibile sfruttare a pieno le potenzialità dei filtri e delle verifiche sull'input di Zend_Form?

Gli errori me li devo gestire separatamente, non potendo generare il form attraverso l'istruzione $form->populate($formData), infatti nella mia processAction avrei una cosa del genere:

if (!$form->isValid($formData)) {
               $form->populate($formData);
               $this->view->form = $form;
               return $this->render('login');
}

con la palese inutilità delle istruzioni

$form->populate($formData);
               $this->view->form = $form;

Visto che la processAction ha comunque una struttura del genere:

if ($this->getRequest()->isPost()) {

    if( tutto ok ) {
               logga l utente;
               return;
    }  

}

// redirecta alla loginAction: gli errori vengono visualizzati attraverso l'utilizzo dell'helper flashmessenger
$this->_redirect(Zend_View_Helper_Url::url(array('action' => 'login'), 'auth'));

non posso fare così?

if ($this->getRequest()->isPost()) {

    if( tutto ok ) {
               logga l utente;
               return;
    }  

   else {
              $this->view->form = $form->populate($formData);
              return;
   }

}

$this->view->form = $form

Mi sembra mooolto piu semplice e conveniente, e non capisco perchè questa soluzione sia così poco diffusa (o magari ho solo cercato nei posti sbagliati)

inviato 7 anni fa
Sifro
modificato 7 anni fa
X 0 X

CIao a tutti,

nella quasi totalità degli esempi trovati su internet, il login su zend framework avviene in 2 action separate:

1) una loginAction mostra il form

2) una processAction processa le informazioni ricevute

Davvero?

Io non ho mai letto di creare una processAction...

Ti vorrei consigliare queste due letture, attento che però bisogna adattare i comandi e alcuni algoritmi alle nuove versioni di zend, per cui poi fai affidamento alla documentazione ufficiale di Zend_Auth:

http://akrabat.com/zend-auth-tutorial/

http://www.phpnews.it/articoli/autenticare-gli-utenti-con-zend-auth-1/

Per pura curiosità e semplicità io ho creato un controller di login con solamente due azioni: quella di index contenente il form e che mi processa i dati ed avvia eventualmente la sessione autenticata, e l'azione per il logout che distrugge la sessione di autenticazione.

risposto 7 anni fa
Mario Santagiuliana
X 0 X

ehehe ok allora come non detto, evidentemente ho trovato le fonti sbagliate.. grazie per avermi confermato questo dubbio!

(ora il controller è decisamente piu snello e flessibile).

ps.: l'articolo su phpnews l'avevo letto ma non tratta esattamente di questo argomento :P

risposto 7 anni fa
Sifro
X 0 X
ps.: l'articolo su phpnews l'avevo letto ma non tratta esattamente di questo argomento :P

C'è anche un secondo articolo sempre qui su phpnews.

 :bye:

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Ah ecco adesso l'ho visto :D

Comunque la mia implementazione è leggermente differente, in quanto il login form è gestito con zend_form ed ho dunque evitato l'utilizzo di flashmessenger.

Ecco come ho fatto:

public function loginAction()
    {
       $form = new Forms_User_Login(array(
                    'action' => Zend_View_Helper_Url::url(
                                array('action' => 'login'), 'auth'),
                    'method' => 'post'
                    )
              );
       
        if ($this->getRequest()->isPost()) {
           
           // this is a POST request, so we can proceed with the 
           // identification process
            $formData = $this->_request->getPost();
            
            if ($form->isValid($formData)) {
               
               // we have received valid data (based on the filters specified
               // in the form model, so we can authenticate
               $credentials = $this->_getCredentials();
               $authAdapter = $this->_getAuthAdapter($credentials);
               $auth = Zend_Auth::getInstance();
               $result = $auth->authenticate($authAdapter);
               
               if ($result->isValid()) {
                     
                     // user provided correct credentials
                     $data = $authAdapter->getResultRowObject(null, 
                                'password');
                    $auth->getStorage()->write($data);

                    $this->_redirect($this->_request->getPost('redir'));
                    return;
                    
               } 
               // username or password incorrect   
               $this->view->errorMessage = "Username and\\or password incorrect";
   
            }
               
             // we didn't receive valid data, so we regenerate the form
             // using already inserted data and generated errors 
             $form->populate($formData);
        }
        
        // we didn't receive POST data, OR data is not valid, OR username/password
        // are not correct: we regenerate the form (if needed, already inserted
        // data has been appended with $form-populate() above, and eventual error
        // messages are show in the errorMessage view variable (see above)
        $this->view->form = $form;
    }
risposto 7 anni fa
Sifro
X 0 X

Va benissimo anche così  ;D

 :bye:

risposto 7 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda