TUTORIAL YII FRAMEWORK (CAPÍTULO 5) – AUTENTICACIÓN DE USUARIOS
Este es el sql de la tabla donde se guardaran nuestros usuarios:
CREATE TABLE usuario ( id serial NOT NULL, username character varying(128) NOT NULL, password character varying(128) NOT NULL, CONSTRAINT usuario_pkey PRIMARY KEY (id) ) WITH (OIDS=FALSE); ALTER TABLE usuario OWNER TO postgres;
Debes crear el modelo y el CRUD de esta tabla con el Gii
En protected/components/UserIdentity.php sustituimos la clase UserIdentity por:
class UserIdentity extends CUserIdentity { private $_id; public function authenticate() { $username=strtolower($this->username); $user=Usuario::model()->find('LOWER(username)=?',array($username)); 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; $this->username=$user->username; $this->errorCode=self::ERROR_NONE; } return $this->errorCode==self::ERROR_NONE; } public function getId() { return $this->_id; } }
En protected/models/Usuario.php agregar las siguientes funciones:
public function validatePassword($password) { return $this->hashPassword($password)===$this->password; } public function hashPassword($password) { return md5($password); }
Para que la clave se guarde en MD5 al crear los usuarios agregar la siguiente linea en la función actionCreate del controlador protected/controllers/UsuarioController.php, hacer lo mismo con la función actionUpdate
$model->attributes=$_POST['Usuario']; //////////////////////////////////////////////////////////// //////////////////LINEA A AGREGAR////////////////////////// $model->password=md5($model->password); /////////////////////////////////////////////////////////// if($model->save())
Para otorgar o denegar permisos a usuarios también se modifica el controlador del modelo, en este caso protected/controllers/UsuarioController.php, vamos a la función accessRules:
public function accessRules() { return array( array('allow', // allow all users to perform 'index' and 'view' actions 'actions'=>array('index','view'), 'users'=>array('*'), ), array('allow', // allow authenticated user to perform 'create' and 'update' actions 'actions'=>array('create','update'), 'users'=>array('@'), ), array('allow', 'actions'=>array('admin','delete'), 'users'=>array('@'), ), array('deny', // deny all users 'users'=>array('*'), ), ); }
En el arreglo actions ponemos las acciones que tiene el controlador y en users los usuarios, si queremos que solo accedan los que están autenticados ponemos una ‘@’ y si queremos que acceda cualquier personas usamos ‘*’.
Publicado el 26/01/2012 en Yii Framework. Añade a favoritos el enlace permanente. 4 comentarios.
buenas hermanos felicidades por sus guias y gracias por ellas estan dando mucha ayuda a estudiar el yii framework, por otro lado, quisiera saber como hago para usar varios tipos de usuarios, admin, usuario tipo1, usuarios tipos2, registrados, todos. obviamente para registrados @ y para todos * pero como hago con los otros tipos?
si se puede hermano, para eso hay que trabajar con perfiles, hay un monton de extensiones que lo manejan, saludos
Como tomas el ID del usuario logeado para impedir que el mismo agregue su id ? es algo que no eh podido hacer :S
si el id es serial y not null no hace falta que el usuario lo coloque, el gestor de base de datos lo calcula automáticamente, según el ultimo consecutivo