Problem about isGuest

I use the following code inside a LoginForm




class LoginForm extends CFormModel

{

   public $username;

   public $password;

   public $rememberMe;

   

   private $_identity;


   public function rules()

   {

      ...

   }

   public function authenticate($attribute, $params)

   {

      $this->_identity = new UserIdentity($this->username, $this->password);

      if (!$this->_identity->authenticate())

         $this->addError('password', 'Incorrect username or password.');

   }

   public function login()

   {

      if ($this->_identity === null)

      {

         $this->_identity = new UserIdentity($this->username, $this->password);

         $this->_identity->authenticate();

      }

      if ($this->_identity->errorCode === UserIdentity::ERROR_NONE)

      {

         $duration = $this->rememberMe ? 3600*24*30 : 0; // 30 days

         Yii::app()->user->login($this->_identity, $duration);

         assert(!Yii::app()->user->isGuest);

      }

      else 

      {

         return false;

      }

   }

}



The problem is the ‘assert’ statement after the Yii::app()->user->login() fails. Does the Yii::app()->user->login() set the ‘isGuest’ if the login success?

Any help will be appreciated.

Finally find out the problem.

Inside the UserIdentity class:




class UserIdentity extends CUserIdentity

{

   private $_id;

   ...

   public function getId()

   {

      $this->_id;

   }

}



The line




$this->_id;



should be :




return $this->_id;



otherwise isGuest will always return true, while at the same time Yii::app()->user->name will still return what you want.

Hi,

in your code


assert(!Yii::app()->user->isGuest);

assert checks if the assertion is false, but your statement


Yii::app()->user->isGuest

is false after login, so the negation of false is true and true is not equal false, so assert return false.

It has nothing to do with getId() because it returns by default username. And getIsGuest() checks if


getId()===null

Edit: I didn’t see your whole getId() method :) Yes, it should return something :)