Source

cruge / models / auth / CrugeAuthDefault.php

<?php
/**
	CrugeAuthDefault

	Implementa un modo de autenticacion basado en la lista de usuarios registrados reales
	almacenados con CrugeStoredUser.

	aqui se hara uso de CrugeModule::availableAuthModes
	y de CrugeModule::useEncryptedPassword

	esta clase es consumida por: CrugeUser::authenticate()
	quien a su vez es invocada por CrugeLogon

	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
	@license protected/modules/cruge/LICENCE
*/
class CrugeAuthDefault extends CBaseUserIdentity implements ICrugeAuth {

	public $username;
	public $password;
	public $options;

	private $_userinstance = null;

	private function _getPwd(){
		if(CrugeUtil::config()->useEncryptedPassword == true)
			return CrugeUtil::hash($this->password);
		return $this->password;
	}

	/**
		este nombre sera referenciado en config/main para hacerle saber a Cruge que use esta clase
		para autenticar:

			'availableAuthMethods'=>array('authdemo'),
	*/
	public function authName(){
		return "default";
	}

	/*	no confundir con un getUserName, esto es un getUser a nivel de instancia

		@returns instancia de ICrugeStoredUser hallado tras la autenticacion exitosa
	*/
	public function getUser(){
		return $this->_userinstance;
	}

	public function setParameters($username,$password,$options = array()){
		$this->username = $username;
		$this->password = $password;
		$this->options = $options;
	}

	public function authenticate() {

		Yii::log(__METHOD__,"info");

		$this->errorCode = self::ERROR_USERNAME_INVALID;

		$model = Yii::app()->user->um->loadUser($this->username);

		Yii::log(__METHOD__.' '.CrugeTranslator::t('logger', 'Returned User').":\n".CJSON::encode($model), "info");

		$this->_userinstance = null;
		if($model != null)
		{
			if($model->password == $this->_getPwd()){
				$this->_userinstance = $model;
				$this->errorCode=self::ERROR_NONE;
			}
			else{
				if(CrugeUtil::config()->debug == true){
					// ayuda a instalar, quiza el usuario olvide quitar la encriptacion de claves
					// y reciba error de ERROR_PASSWORD_INVALID, es porque esta actuando el Hash
					// y el usuario recien creado trae una clave no encritpada
					if(CrugeUtil::config()->useEncryptedPassword == true){
						echo Yii::app()->user->ui->setupAlert(
							CrugeTranslator::t('logon', 'Maybe your password doesn\'t match because you have set up \'useEncryptedPassword = true\' when you were installing Cruge, try \'false\' instead'
                            ));
					}
				}
				$this->errorCode=self::ERROR_PASSWORD_INVALID;
			}
		}
		else{
			// username o email error
			$this->errorCode=self::ERROR_USERNAME_INVALID;
		}

		Yii::log(__CLASS__."\nauthenticate returns:\n".$this->errorCode
			."\n boolean result is:".($this->errorCode==self::ERROR_NONE),"info");


		return $this->errorCode==self::ERROR_NONE;
	}
}