2015-04-18 88 views
0

我在網站上完成了用戶系統。 在我UsersController.php我有這樣的方法:登錄前檢查字段

public function login() 
{ 
    if($this->request->is('post')) { 
     if($this->Auth->login()) { 
      $this->Session->setFlash('Connexion établie', 'flash_success'); 
      $this->redirect($this->Auth->redirectUrl()); 
     } else { 
      $this->Session->setFlash("Nom d'user ou mot de passe invalide, réessayer", 'flash_error'); 
      $this->redirect(array('controller' => 'indexes', 'action' => 'index')); 
     } 
    } 
} 

它工作得很好,但我需要改變它。在我的數據庫中,我有一個字段「驗證」,它是一個布爾值。 在登錄時,如果字段爲true,我想記錄用戶,但如果字段爲false,我不想記錄他。

感謝您的幫助

+0

的可能重複的[cakephp的認證基本只有合法的用戶(http://stackoverflow.com/questions/21932483/cakephp-authenticate-basic-only-valid-users) – ndm

回答

0

您需要範圍字段。您可以將其添加在beforeFilter方法例如:

public function beforeFilter() { 
    $this->Auth->authenticate = array(
     'YourAuthComponent' => array(
      'fields' => array(
       'username' => 'username', 
       'password' => 'password' 
      ), 
      'userModel' => 'Users.User', 

      //This is what you need 
      'scope' => array(
       'User.active' => 1, 
       'User.verified' => 1) 
     ) 
    ); 
} 

或者你可以在你的AppController或UsersController的選項添加到您的組件陣列。

class AppController extends Controller { 

/** 
* Components used from the application 
* 
* @var array 
*/ 
public $components = array(

    'Auth'=> array(
     'authenticate' => array(
      'Form' => array(
       'fields' => array('username' => 'email'), 
       'scope' => array(
        'User.active' => 1, 
        'User.verified' => 1) 
        ) 
       ) 
      ) 
     ), 
    ); 
}