1
class UserIdentity extends CUserIdentity
{
    const ERROR_USERNAME_INACTIVE=67;
    private $_id;

    public function authenticate()
    {
        $username=strtolower($this->username);
        $user=User::model()->find('LOWER(username)=?',array($username));
        if($user===null)
            $this->errorCode=self::ERROR_USERNAME_INVALID;
        else if(!$user->validatePassword($this->password))
            $this->errorCode=self::ERROR_PASSWORD_INVALID;
        else if($user->active == 0)
            $this->errorCode=self::ERROR_USERNAME_INACTIVE; 
        else
        {
            $this->_id=$user->id;
            $this->username=$user->username;
            $this->errorCode=self::ERROR_NONE;
        }
        return $this->errorCode==self::ERROR_NONE;
    }

    public function getId()
    {
        return $this->_id;
    }
}

しかし、私の見解では、ERROR_USERNAME_INACTIVE メッセージの代わりに Incorrect username or password が返されます。このエラーを修正するにはどうすればよいですか?

4

1 に答える 1

4

LoginFormモデルのauthenticate関数では、error_codeに基づいてエラーを追加する必要があります..

public function authenticate($attribute,$params)
{
    if(!$this->hasErrors())
    {
        $this->_identity=new UserIdentity($this->email,$this->password);
        if(!$this->_identity->authenticate()) {
            if($this->_identity->errorCode === UserIdentity::ERROR_USERNAME_INACTIVE)
                $this->addError('username','My custom error');
            else
                $this->addError('password','Incorrect email or password.');
        }
    }
}
于 2012-08-19T17:33:23.903 に答える