Incam_PROFIND_Web/www/protected/components/IdentificacionUsuario.php
david df138cf8bb - Revisión del código en general
- Tarea #1099 -> Mejorar la encriptación de las contraseñas
- Tarea #1104 -> Guardar en el usuario la fecha de creación y del último login
- Tarea #1125 -> Quitar la máscara en el campo 'teléfono' del usuario

git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_PROFIND_Web/trunk@57 3fe1ab16-cfe0-e34b-8c9f-7d8c168d430d
2012-10-09 11:44:12 +00:00

86 lines
2.7 KiB
PHP

<?php
/**
* @class IdentificacionUsuario
* @brief Realiza el proceso de identificación de un usuario en el sistema.
*
* @package application.components
*/
class IdentificacionUsuario extends CBaseUserIdentity {
private $_id;
public $email;
public $password;
// Constantes de error declaradas en la clase padre
//const ERROR_NONE=0;
//const ERROR_USERNAME_INVALID=1;
//const ERROR_PASSWORD_INVALID=2;
//const ERROR_UNKNOWN_IDENTITY=100;
const ERROR_ESTADO_NOACTIVO=3;
const ERROR_ESTADO_BORRADO=4;
const ERROR_ESTADO_BLOQUEADO=5;
/**
* @brief Contructor.
* @param string $email email
* @param string $password password
*/
public function __construct($email, $password) {
$this->email = $email;
$this->password = $password;
}
/**
* @brief Comprueba que la identificación de un usuario es correcta.
* @return boolean
*/
public function authenticate() {
$usuario = Usuario::model()->findByAttributes(array('email' => $this->email));
$ph = new PasswordHash(
Yii::app()->params['phpass']['iteration_count_log2'],
Yii::app()->params['phpass']['portable_hashes']
);
if ($usuario === NULL) {
$this->errorCode = self::ERROR_USERNAME_INVALID;
} else {
if (($usuario->password !== md5($this->password)) && !$ph->checkPassword($this->password, $usuario->password))
$this->errorCode = self::ERROR_PASSWORD_INVALID;
else if($usuario->estado == Usuario::ESTADO_NOACTIVO)
$this->errorCode = self::ERROR_ESTADO_NOACTIVO;
else if($usuario->estado == Usuario::ESTADO_BORRADO)
$this->errorCode = self::ERROR_ESTADO_BORRADO;
else if($usuario->estado == Usuario::ESTADO_BLOQUEADO)
$this->errorCode = self::ERROR_ESTADO_BLOQUEADO;
else {
// Si el usuario tiene cifrada la contraseña con md5()
// pasarla al nuevo método.
if ($usuario->password{0} !== '$') {
$usuario->password = $ph->HashPassword($this->password);
$usuario->save();
}
$this->_id = $usuario->id;
$this->errorCode = self::ERROR_NONE;
}
}
return !$this->errorCode;
}
/**
* @brief Devuelve el identificador único para la identidad del usuario
* @return string.
*/
public function getId() {
return $this->_id;
}
/**
* @brief Devuelve el email del usuario que está en sesión.
* @return string
*/
public function getName() {
return $this->email;
}
}