I’m working through the book Web Application Development with Yii and PHP (Second Addition) by Jeffrey Winesett. I’m in chapter 6 where I’m learning about User Mgmt. and Authentication. On page 146 of the book, we are modifying the Yii default login (demo/demo or admin/admin) to utilize the username and password from the database. I’m following the code exactly and have replace the contents of the …/protected/contents/UserIdentity.php file from the default code to the code recommended in the book. See below. When I do this, I try to log-in and get a blank page (…/trackstar/index.php/site/login). I get no error messages…nothing. If you could, please make suggestions as to what might be wrong. I suspect something is wrong with the below syntax but I cannot see an issue. Note…if I change the code back to the default code, it works fine using the old log-in information (admin/admin or demo/demo). Thx.
Default code:
<?php
/**
* UserIdentity represents the data needed to identity a user.
* It contains the authentication method that checks if the provided
* data can identity the user.
*/
class UserIdentity extends CUserIdentity
{
/**
* Authenticates a user.
* The example implementation makes sure if the username and password
* are both 'demo'.
* In practical applications, this should be changed to authenticate
* against some persistent user identity storage (e.g. database).
* @return boolean whether authentication succeeds.
*/
public function authenticate()
{
$users=array(
// username => password
'demo'=>'demo',
'admin'=>'admin',
);
if(!isset($users[$this->username]))
$this->errorCode=self::ERROR_USERNAME_INVALID;
elseif($users[$this->username]!==$this->password)
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
$this->errorCode=self::ERROR_NONE;
return !$this->errorCode;
}
}
New code:
<?php
/**
* UserIdentity represents the data needed to identity a user.
* It contains the authentication method that checks if the provided
* data can identity the user.
*/
class UserIdentity extends CUserIdentity
{
private $_id;
public function authenticate()
{
$user=User::model()->find('LOWER(username)=?',array(strtolower($this->username)));
if($user===null)
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if(!$user->validatePassword($this->password))
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
{
$this->_id=$user->id;
$this->username=$user->username;
$this->setState('lastLogin', date("m/d/y g:i A", strtotime($user->last_login_time)));
$user->saveAttributes(array(
'last_login_time'=>date("Y-m-d H:i:s", time()),
));
$this->errorCode=self::ERROR_NONE;
}
return $this->errorCode==self::ERROR_NONE;
}
public function getId()
{
return $this->_id;
}
}