2013-01-23 16 views
6

Ich entwickle eine Anwendung mit ZF2. Ich habe die Benutzerauthentifizierung mit dem Benutzernamen & Passwort durchgeführt. Aber ich möchte eine zusätzliche Spalte (Beispiel: Status) in der Authentifizierung überprüfen.ZF2 Authentifizierung

Ich habe die folgenden Codes gemacht.

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; 
} 

Wie kann ich die Spalte "Status" in der Authentifizierung überprüfen? Hinweis: Statuswert sollte 1 sein. Danke.

Antwort

7

Als ich meine Authentifizierung mit zf2 und doctrine erstellte, habe ich Autorisierungs-Plugin erstellt und angepasst this adapter für die Weitergabe zusätzliche Spalte für die Authentifizierung. Sie müssen wahrscheinlich in ähnliche Richtungen gehen.

$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

Nach ändert Ihr Code wie folgt aussehen sollte.

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

Vielen Dank. Es funktioniert. Groß!!!. – user2003356

+0

@Developer Sie verwenden MD5 nicht wirklich als Anmeldungsbehandlung, oder? –

+0

@Daniel Ich benutze immer CredentialTreatment, aber user2003356 könnte es nicht verwenden, über der Antwort ist Antwort basierend auf Frage. – Developer

1

ZF2 bietet eine weitere Möglichkeit zusätzliche Prüfungen mit anderen Spalten als die für Identität und Berechtigungsnachweis dank der Methode getResultRowObject vorgesehen zu behandeln. Alle Spalten von usertable in Ihrem Beispiel sind als Eigenschaften des Objekts verfügbar, das von getResultRowObject() zurückgegeben wird. So könnten Sie Ihren Code mit dieser erweitern:

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

Grüße, Marc