Yii 用户标识错误代码


yii useridentity errorcode

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

身份验证函数的LoginForm模型中,您需要根据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.');
        }
    }
}