2013-01-23 8 views
6

tôi đang phát triển một ứng dụng bằng ZF2. Tôi đã thực hiện xác thực người dùng bằng mật khẩu tên người dùng &. Nhưng, tôi muốn kiểm tra một cột bổ sung (ví dụ: trạng thái) trong xác thực.Xác thực ZF2

Tôi đã thực hiện các mã sau.

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

Làm cách nào để kiểm tra trạng thái của cột? Lưu ý: giá trị trạng thái phải là 1. Cảm ơn.

Trả lời

7

Khi tôi xây dựng chứng thực bằng cách sử dụng zf2 và học thuyết, tôi đã tạo plugin ủy quyền và tùy chỉnh this adapter để chuyển cột phụ để xác thực. Bạn có thể cần phải đi theo các hướng tương tự.

$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

Sau khi thay đổi mã của bạn sẽ giống như thế này.

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

Thank you very much. Nó đang làm việc. Tuyệt quá!!!. – user2003356

+0

@Developer Bạn đang không thực sự sử dụng MD5 như là điều trị chứng nhận, phải không? –

+0

@Daniel Tôi luôn sử dụng CredentialTreatment, nhưng user2003356 có thể không sử dụng nó, câu trả lời ở trên là câu trả lời dựa trên câu hỏi. – Developer

1

ZF2 cung cấp một cách khác để xử lý kiểm tra bổ sung sử dụng các cột khác hơn so với những dự định dành cho nhận dạng và chứng chỉ nhờ phương pháp getResultRowObject. Tất cả các cột của usertable trong ví dụ của bạn có sẵn dưới dạng thuộc tính của đối tượng được trả về bởi getResultRowObject(). Vì vậy, bạn có thể mở rộng mã của bạn với điều này:

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

Kính trọng, Marc