2013-11-14 79 views
3

反正有強迫yii通過給定用戶名認證用戶而不諮詢數據庫嗎?Yii:強制認證

我的應用將使用api登錄,直到api未寫入,我們不能使用app

這個api的東陽試圖用User::model()

public function authenticate() 
{ 
    if (strpos($this->username,"@")) { 
     $user=User::model()->findByAttributes(array('email'=>$this->username)); 
    } else { 
     $user=User::model()->findByAttributes(array('username'=>$this->username)); 
    } 
    if($user===null) 
     if (strpos($this->username,"@")) { 
      $this->errorCode=self::ERROR_EMAIL_INVALID; 
     } else { 
      $this->errorCode=self::ERROR_USERNAME_INVALID; 
     } 
    else if(Yii::app()->getModule('user')->encrypting($this->password)!==$user->password) 
     $this->errorCode=self::ERROR_PASSWORD_INVALID; 
    else if($user->active==0&&Yii::app()->getModule('user')->loginNotActiv==false) 
     $this->errorCode=self::ERROR_STATUS_NOTACTIV; 
    else if($user->active==-1) 
     $this->errorCode=self::ERROR_STATUS_BAN; 
    else { 
     $this->_id=$user->id; 
     $this->errorCode=self::ERROR_NONE; 
     $user->saveState($this); 
    } 
    return !$this->errorCode; 
} 

回答

3

下面的代碼顯示了的yiic生成的默認UserIdentity.php,當我們沒有user模型,從而,驗證過程的裂縫。它使用硬編碼的用戶和密碼,只要你想。

<?php 

/** 
* UserIdentity represents the data needed to identity a user. 
* It contains the authentication method that checks if the provided 
* data can identity the user. 
*/ 
class UserIdentity extends CUserIdentity 
{ 
    /** 
    * Authenticates a user. 
    * The example implementation makes sure if the username and password 
    * are both 'demo'. 
    * In practical applications, this should be changed to authenticate 
    * against some persistent user identity storage (e.g. database). 
    * @return boolean whether authentication succeeds. 
    */ 
    public function authenticate() 
    { 
     $users=array(
      // username => password 
      'demo'=>'demo', 
      'admin'=>'admin', 
     ); 
     if(!isset($users[$this->username])) 
      $this->errorCode=self::ERROR_USERNAME_INVALID; 
     elseif($users[$this->username]!==$this->password) 
      $this->errorCode=self::ERROR_PASSWORD_INVALID; 
     else 
      $this->errorCode=self::ERROR_NONE; 
     return !$this->errorCode; 
    } 
}