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消息,我该怎么做才能解决此错误?
答案 0 :(得分:4)
在auuthenticate函数的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.');
}
}
}