Users Authentication

Hello,every one!

table: users _id(PK),username,password I want to login in with the table 's username and password,but it always display that the password is wrong.I don’t know why,please help!

/protected/components/UserIdentity.php




<?php

class UserIdentity extends CUserIdentity  

{  

	private $_id;   

	public function authenticate() {

		$user = Users::model()->findByAttributes(array('username' => $this->username));

		if ($user === null) {

			$this->errorCode = self::ERROR_USERNAME_INVALID;

		} else {

			if ($user->password !== $user->encrypt($this->password)) {

				$this->errorCode = self::ERROR_PASSWORD_INVALID; 

			} 			   

			else

			{

				$this->_id=$user->_id;

				$this->username=$user->username;

				$this->errorCode=self::ERROR_NONE;

			}		  

		}

		return!$this->errorCode;

	}          

	public function getId() {

		return $this->_id;

	}

}



models/LoginForm.php




class LoginForm extends CFormModel

{

	public $username;

	public $password;

	public $rememberMe;


	private $_identity;


	/**

	 * Declares the validation rules.

	 * The rules state that username and password are required,

	 * and password needs to be authenticated.

	 */

	public function rules()

	{

		return array(

			// username and password are required

			array('username, password', 'required'),

			// rememberMe needs to be a boolean

			array('rememberMe', 'boolean'),

			// password needs to be authenticated

			array('password', 'authenticate'),

		);

	}


	/**

	 * Declares attribute labels.

	 */

	public function attributeLabels()

	{

		return array(

			'rememberMe'=>Yii::t('default','Remember me next time'),

			'username'=>Yii::t('default', 'Username'),

			'password'=>Yii::t('default', 'Password'),

		);

	}


	/**

	 * Authenticates the password.

	 * This is the 'authenticate' validator as declared in 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.');

	}


	/**

	 * Logs in the user using the given username and password in the model.

	 * @return boolean whether login is successful

	 */

	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);

			return true;

		}

		else

			return false;

	}

}

controllers/SiteController.php




class SiteControllerextends Controller{

......................

public function actionLogin()

	{

		$model=new LoginForm;


		// if it is ajax validation request

		if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')

		{

			echo CActiveForm::validate($model);

			Yii::app()->end();

		}


		// collect user input data

		if(isset($_POST['LoginForm']))

		{

			$model->attributes=$_POST['LoginForm'];

			// validate user input and redirect to the previous page if valid

			if($model->validate() && $model->login())

				$this->redirect(Yii::app()->user->returnUrl);

		}

		// display the login form

		$this->render('login',array('model'=>$model));

	}

......................

}



I want to implement the function that I can use the users table’s username and password to log in ,but now the result is “Incorrect username or password”.I think maybe there is something wrong with the UserIdentity.php.How ?

where is your encrypt method I dont see it in your model

A stupid question - is your password in the DB encrypted?

Thank you waterloomatt and alirz23,it is really a stupid question,oh no,the password in the Db is not encrypted!!!I have ignored it!!!! . I think my next step is to be careful ,and understand Yii really!Thank you very much!