Logging In After Modifying Useridentity.php Is Yielding A Blank Page - No Clue Why

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;

        }

}



./protected/contents/UserIdentity.php is a typo, right?

See webserver error logs for details of the error. Blank screen usually means error 500 + no error reporting.

Btw seems like this line $this->username=$user->username; is useless.

Yes, typo. …/protected/components/UserIdentity.php.

The only information I’m getting in the log files is:

2014/01/21 23:38:48 [trace] [system.CModule] Loading "log" application component

in /Library/WebServer/Documents/trackstar/index.php (13)

2014/01/21 23:38:48 [trace] [system.CModule] Loading "request" application component

in /Library/WebServer/Documents/trackstar/index.php (13)

2014/01/21 23:38:48 [trace] [system.CModule] Loading "urlManager" application component

in /Library/WebServer/Documents/trackstar/index.php (13)

I’ve removed $this->username=$user->username;

Still not sure how to proceed. Your response is greatly appreciated. Thx.

It appears my program gets hung up on this line of code. Any thoughts?

            &#036;user=User::model()-&gt;find('LOWER(username)=?',array(strtolower(&#036;this-&gt;username)));

If I comment out the above line and set $user=NULL; it progresses just fine and produces the proper error messages of "incorrect username or password".

No, I meant server logs, not Yii’s.

Anyway, try this:


$user=User::model()->find('LOWER(username)= :login', array(':login' => strtolower($this->username)));

Btw if you’re using MySQL, query like WHERE LOWER(username) = … will be not using index, so the query execution can become slow one day.

It didn’t work. The server logs from Apache are:

[Wed Jan 22 06:43:31 2014] [error] [client ::1] PHP 6. CController->runActionWithFilters() /Library/WebServer/Documents/yii/framework/web/CController.php:265, referer: http://localhost/trackstar/index.php/site/login

[Wed Jan 22 06:43:31 2014] [error] [client ::1] PHP 7. CController->runAction() /Library/WebServer/Documents/yii/framework/web/CController.php:286, referer: http://localhost/trackstar/index.php/site/login

[Wed Jan 22 06:43:31 2014] [error] [client ::1] PHP 8. CInlineAction->runWithParams() /Library/WebServer/Documents/yii/framework/web/CController.php:308, referer: http://localhost/trackstar/index.php/site/login

[Wed Jan 22 06:43:31 2014] [error] [client ::1] PHP 9. SiteController->actionLogin() /Library/WebServer/Documents/yii/framework/web/actions/CInlineAction.php:49, referer: http://localhost/trackstar/index.php/site/login

[Wed Jan 22 06:43:31 2014] [error] [client ::1] PHP 10. CModel->validate() /Library/WebServer/Documents/trackstar/protected/controllers/SiteController.php:94, referer: http://localhost/trackstar/index.php/site/login

[Wed Jan 22 06:43:31 2014] [error] [client ::1] PHP 11. CValidator->validate() /Library/WebServer/Documents/yii/framework/base/CModel.php:159, referer: http://localhost/trackstar/index.php/site/login

[Wed Jan 22 06:43:31 2014] [error] [client ::1] PHP 12. CInlineValidator->validateAttribute() /Library/WebServer/Documents/yii/framework/validators/CValidator.php:213, referer: http://localhost/trackstar/index.php/site/login

[Wed Jan 22 06:43:31 2014] [error] [client ::1] PHP 13. LoginForm->authenticate() /Library/WebServer/Documents/yii/framework/validators/CInlineValidator.php:42, referer: http://localhost/trackstar/index.php/site/login

[Wed Jan 22 06:43:31 2014] [error] [client ::1] PHP 14. UserIdentity->authenticate() /Library/WebServer/Documents/trackstar/protected/models/LoginForm.php:52, referer: http://localhost/trackstar/index.php/site/login

[Wed Jan 22 06:43:31 2014] [error] [client ::1] PHP 15. YiiBase::autoload() /Library/WebServer/Documents/trackstar/protected/models/LoginForm.php:0, referer: http://localhost/trackstar/index.php/site/login