2013-11-14 3 views
3

Есть ли способ заставить yii аутентифицировать пользователя по заданному имени пользователя без консультации с базой данных?Yii: принудительно аутентифицировать

Мое приложение будет использовать api для входа в систему и до этого api не написано, мы не можем использовать app.

Beacause этого api мы не имеем user модель так, то процесс аутентификации трещин при попытке использовать 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

Следующий код показывает по умолчанию UserIdentity.php, который генерирует yiic. Он использует жестко закодированных пользователей и пароль по своему усмотрению.

<?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; 
    } 
} 
Смежные вопросы