2013-01-23 12 views
6

Sto sviluppando un'applicazione che utilizza ZF2. Ho fatto l'autenticazione dell'utente con la password & nome utente. Ma, vorrei verificare una colonna aggiuntiva (esempio: stato) in autenticazione.ZF2 Authentication

Ho fatto i seguenti codici.

public function authenticate() 
{  
    $this->authAdapter = new AuthAdapter($this->dbAdapter, 
      'usertable', 
      'username', 
      'password' 
    ); 

    $this->authAdapter->setIdentity($this->username) 
       ->setCredential($this->password) 
       ->setCredentialTreatment('MD5(?)'); 
    $result = $this->authAdapter->authenticate(); 
    return $result; 
} 

Come posso controllare la colonna "stato" in autenticazione? Nota: il valore di stato dovrebbe essere 1. Grazie.

risposta

7

Durante la creazione dell'autenticazione tramite zf2 e doctrine, ho creato il plugin di autorizzazione e personalizzato this adapter per il passaggio di una colonna aggiuntiva per l'autenticazione. Probabilmente dovrai procedere in direzioni simili.

$adapter = new AuthAdapter($db, 
          'users', 
          'username', 
          'password', 
          'MD5(?)' 
          ); 

// get select object (by reference) 
$select = $adapter->getDbSelect(); 
$select->where('active = "TRUE"'); 

// authenticate, this ensures that users.active = TRUE 
$adapter->authenticate(); 

Reference

Dopo cambia il codice dovrebbe essere simile a questo.

public function authenticate() 
{  
    $this->authAdapter = new AuthAdapter($this->dbAdapter, 
      'usertable', 
      'username', 
      'password' 
    ); 

    $select = $this->authAdapter->getDbSelect(); 
    $select->where('status= "1"'); 
    $this->authAdapter->setIdentity($this->username) 
       ->setCredential($this->password) 
       ->setCredentialTreatment('MD5(?)'); 
    $result = $this->authAdapter->authenticate(); 
    return $result; 
} 
+0

Grazie mille. Funziona. Grande!!!. – user2003356

+0

@Developer Non stai davvero utilizzando MD5 come trattamento delle credenziali, vero? –

+0

@Daniel Uso sempre CredentialTreatment, ma user2003356 potrebbe non utilizzarlo, la risposta sopra è risposta basata sulla domanda. – Developer

1

ZF2 fornisce un altro modo per gestire controlli aggiuntivi utilizzando altre colonne rispetto a quelle previste per l'identità e credenziali grazie al metodo getResultRowObject. Tutte le colonne di usertable nell'esempio sono disponibili come proprietà dell'oggetto restituito da getResultRowObject(). Così si potrebbe ampliare il vostro codice con questo:

if ($result->isValid()) { 
    $identityRowObject = $this->authAdapter->getResultRowObject(); 
    $status = $identityRowObject->status; 
    // do whatever complex checking you need with $status... 
} 

saluti, Marc