I am completely new to Yii development and I am also completely new to these forums. Reading the forums has helped me so far, but I was unable to find anything on the error I am getting. I hoping someone can help me get past a stumbling block I have encountered. For reference I am now up to Chapter 6 - Authenticating users using the DB.
Before I discuss my problem it may help to know what I am doing differently to the book. Firstly, I made the decision to use crypt with blowfish in place of MD5. I am crypting the passwords with blowfish on creation or update of users after form validation has occurred, big thanks to this article.
Secondly, I am using the password stored in the database to salt user entered passwords entered into the login form and I am comparing this against the password string in the database.
/**
* Checks if the given password is correct.
* @param string password to be validate
* @return boolean whether the password is valid
*/
public function validatePassword($password)
{
return $this->hashPassword($password)===$this->$password;
}
/**
* Calling the hashPassword function crypts the user entered password using
* the existing blowfish password contained in the DB as the salt.
*/
public function hashPassword($password)
{
return crypt($password, $this->$password);
}
I can successfully login when the username and password match what is in the DB. I also get a valid error message when entering a username that is not found in the database. However, when I type in a correct username and an incorrect password I get the following error:
CException
Property "User.test" is not defined.
/Users/jonpolygon/Documents/workspace/dev/yii/framework/db/ar/CActiveRecord.php(143)
"test" is the password that I have entered in that did not match the stored password in the database.
My authentication script has come from the book, which I think may be the culprit, but I cannot see the problem.
public function authenticate()
{
$user=User::model()->find('LOWER(username)=?', array(strtolower($this->username)));
if($user===null)
{
$this->errorCode=self::ERROR_USERNAME_INVALID;
}
elseif(!$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;
}
Also I should mention that I am completely new to frameworks in general. Also, I have worked with PHP for a few years but I still consider myself a novice, so I apologize in advance if I am a bit slow to catch on.
Thanks,
Jonathan