Chicos, Necesito saber de qué forma puedo enlazar la tabla usuario que está en mysql para poder loguearme desde ahí y manejar todos los datos de la bd.
he leído que Yii por defecto trae esta gestión, pero no logro entender aún como hacerlo para que el login sea consultado en mi base de datos que esta en mysql a la tabla usuario. y no a users como viene por defecto en yii.
Estoy de esa forma, cambiando los nombres de las variables quedando asi:
EN UserIdentity.php:
Class UserIdentity extends CUserIdentity
{
private $_id;
public function authenticate()
{
$username=strtolower($this->username);
$user=Usuario::model()->find('LOWER(username)=?',array($username));/*cambie el nombre de user por usuario que es el nombre de mi tabla en la base de datos.*/
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_usuario;//el nombre de mi id.
$this->username=$user->username;
$this->errorCode=self::ERROR_NONE;
}
return $this->errorCode==self::ERROR_NONE;
}
public function getId()
{
return $this->_id_usuario;
}
}
por último he hecho tal cual dice el manual asi:
en Usuario.php
class User extends CActiveRecord
{
......
public function validatePassword($password)
{
return $this->hashPassword($password,$this->salt)===$this->password;
}
public function hashPassword($password,$salt)
{
return md5($salt.$password);
}
protected function generateSalt()
{
return uniqid(’’,true);
}
…
}
pero, me sale el siguiente error:
Property "Usuario.salt" is not defined.
cambié la funcion ValidatePassword para que retornara sólo el password y aún así me sale otro error:
Property "CWebApplication.usuario" is not defined.
SI alguien ya ha hecho esto antes, agradezco su ayuda
después de algunas modificaciones el código queda así:
UserIdentity.php
class UserIdentity extends CUserIdentity
{
private $_id;
public function authenticate()
{
$username=strtolower($this->username);//devuelve el string con todas sus letras minusculas
$user=Usuario::model()->find('LOWER(username)=?',array($username));/*devuelve los valores en minusculas, en esta parte se recuperan los datos que ingreso el usuario(Funcion find),y es guardado en $user..*/
if($user==null)//si no devuelve nada la función.
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if (!$user->validatePassword($this->password))/* si el password no es válido.*/
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
{
$this->_id=$user->id_usuario;// guarda en _id el id_usuario de user.
$this->username=$user->username;//guarda el username.
$this->errorCode=self::ERROR_NONE;
}
return $this->errorCode==self::ERROR_NONE;
}
public function getId()//devuelve el id.
{
return $this->_id;
}
}
en Usuario.php
public function validatePassword($password)
{
return $this->hashPassword($password,$salt);
}
public function hashPassword($password,$salt)
{
return md5($salt.$password);
}
protected function generateSalt()
{
return uniqid('',true);
}
y por último en el LoginForm.php
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;
}
ES importante decir, que mi tabla de autentificacion en mi bd se llama usuario,uso username para nombre de usuario y password para contraseña, id_usuario es mi id.