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 消息,我应该怎么做才能纠正这个错误?

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 回答