Login utilizando el “auth component” de cakephp 1.2

Este post lo público después de leer un comentario en el articulo que había escrito( Usar un form con AJAX en CakePHP 1.2)
Dicho comentario preguntaba como utilizar este componente, así que decidí dedicarle un post entero, para explicarlo de manera extensa y tratar de no dejar muchas dudas.

Titubee un poco en hacer esta publicación, ya que en el manual de cake viene bastante bien explicado desde mi punto de vista, pero como igual entiendo que a otras personas se les puede dificultar porque está en ingles o por la explicación que dan, me convencí de publicarlo.

cake-logoPara empezar, deberíamos saber que es el “auth component”, que no es otra cosa sino un componente que nos será de mucha ayuda cuando queramos autenticar usuarios, pero este articulo sólo se limitará a indicar como usarlo para el simple “login”, y ninguna otra cosa, si alguien tiene alguna duda, puede preguntar y se la contestaremos con gusto o incluso podríamos dedicarle un post entero al tema, como ocurre con este.

Ahora sí, a hablar de como utilizar este componente, primero que nada, este ya viene incluido en cake, es decir no tenemos que descargar nada, pero si tendriamos que preguntarnos si vamos a trabajar con el archivo que trae (tuAplicacion\cake\libs\controller\components\auth.php) o si debemos copiarlo a nuestra carpeta (tuAplicacion\app\controllers\components\auth.php), yo recomiendo la última, ya que si echamos a perder el archivo tendremos un respaldo a la mano.

Una vez decidido esto, toca analizar la tabla y los campos que utilizaremos para la autenticación, por default, cake utilizará la tabla ‘users’, y los campos ‘username’ y ‘password(con cifrado de seguridad SHA1)’, OJO, todo esto puede ser modificado, pero en nuestro caso sólo cambiaremos el cifrado por un clásico MD5.

Primero crearemos nuestra tabla:

CREATE TABLE users (
    id integer AUTO_INCREMENT,
    username char(50),
    password char(32),
    PRIMARY KEY (id)
);

Una vez lista nuestra tabla, procederemos a crear nuestro controlador “users_controller.php” con el siguiente código:

<?php
class UsersController extends AppController{
	var $name='Users';
	var $components=array('Auth');
	function login(){	
	}
	function logout(){
		$this->redirect($this->Auth->logout());
	}	
}
?>
(noten que uso en password el tamaño de 32, ya que es lo que el cifrado md5 necesita, otros cifrados pueden necesitar valores diferentes.)

Así es, no necesitamos mas que esos 2 métodos, esto es porque en nuestro caso no necesitamos los métodos ‘index’, ‘add’, etc., más sin embargo, si tú las necesitas (que es lo más probable, puedes crear dichos métodos).

Una vez echo esto, creamos nuestro modelo ‘user.php’:

<?php
class User extends AppModel{
 
}
?>

No necesitamos para este ejemplo poner nada dentro del mismo.

Hasta ahora ya tenemos nuestro controlador y modelo, ahora vamos por las vistas, aunque nada más necesitaremos la vista ‘login.ctp’:

<?php
        $session->flash('auth');
	echo $form->create('User',array('action'=>'login'));
	        echo $form->input('username');
	        echo $form->input('password');
	echo $form->end('Ingresar');
?>

Esto es todo lo necesario para trabajar con el ‘login’ de el “auth component”, bueno nos falta preparar nuestro componente para usar la autenticación que queremos y otros detalles:
Abrimos el archivo ‘auth.php’.
Primero, si deseamos usar otro modelo, buscamos la línea

 var $userModel = 'User';

y cambiamos ‘User’ por el modelo deseado.
Para usar campos diferentes, cambiamos esta línea

var $fields = array('username' => 'username', 'password' => 'password');

es obvio pero cambiaremos los nombres de los campos por los deseados, por ejemplo:

var $fields = array('username' => 'email', 'password' => 'pass');

Si queremos indicar a donde nos va a redirigir el login, la línea

var $loginRedirect = 'controlador/index';

Por último, para cambiar el cifrado buscamos el siguiente método:

function password($password) {
		return Security::hash($password, 'md5', false);
	}

Para este ejemplo, usamos el cifrado md5, si quieres usar otro, basta con indicarlo de la misma manera.

Pues bien, el componente tiene otras opciones, pero en nuestro caso no nos ocupa, así que con esto finalizamos el post, espero les sirva, cualquier duda o comentario será bien recibido, saludos.

16
Oct
2009

Usar un form con AJAX en CakePHP 1.2

cakephp

CakePHP + AJAX

Este pequeño tutorial, pretende mostrar como se utiliza la tecnología AJAX en CakePHP 1.2, para esto utilizaré como ejemplo la creación de un sitio que nos permita crear varios post sin necesidad de cambiar de vista y que al mismo tiempo nos muestre una lista de todos los post que tenemos. Adelante pues.

(Estos pasos suponen que ya tienes tu proyecto creado y también la base de datos, para este ejemplo necesitaremos tener una tabla llamada ‘posts’ con los campos ‘id’, ‘titulo’ y ‘contenido’).

1) Antes de cualquier otra cosa necesitamos añadir a CakePHP las librerías para que nos funcione correctamente AJAX, estas librerías son ‘prototype’ y ‘scriptaculous’, de hecho solo necesitamos descargarnos esta última, ya que en el archivo que descargamos se incluye la librería ‘prototype’, para descargarla puedes dar clic aquí.

Una vez descargado el archivo, vamos a extraer el contenido de la carpeta ‘lib’ que es donde localizamos la librería ‘prototype.js’ y también el contenido de la carpeta ‘src’ donde se muestran varios archivos .js, todos estos archivos los colocamos en la carpeta ‘app/webroot/js’, incluyo una imagen para que vean como nos queda.

ajax1

2) Ahora, crearemos nuestro modelo, que nos quedaría así ‘app/models/post.php’ y con el código siguiente:

<?php
class Post extends AppModel{

}
?>

3) Creamos nuestro controlador, ‘app/controller/posts_controller.php’ con el siguiente código que comento para que se entienda cada parte:

<?php
class PostsController extends AppController{
var $name=’Posts’;
//Aquí incluimos los helpers(ayudantes) que necesitaremos.
var $helpers=array(‘Html’,'Form’,'Javascript’,'Ajax’);
//Creamos la función index que solo nos devuelve un arreglo con todos los posts que tengamos.
function index(){
$this->set(‘posts’,$this->Post->find(‘all’));
}
//Esta función, como su nombre lo indica, sirve para agregar un nuevo post.
function add(){
if (!empty($this->data)) {
if ($this->Post->save($this->data)) {
}
}
//Lo que se hace en esta parte es recargar la vista index, para que se muestre el post
//que acabamos de agregar, junto con los que ya teníamos. (Sin este código la magia no
//existiría).
$this->set(‘posts’, $this->Post->find(‘all’));
$this->render(‘index’);
}
//Esta función elimina un post y recarga la página, exactamente como en el método ‘add’.
function del($id=null){
echo $id;
if (!empty($id)) {
if ($this->Post->delete($id)) {
}
}
$this->set(‘posts’, $this->Post->find(‘all’));
$this->render(‘index’);
}
}
?>

4) Por último, sólo tenemos que crear nuestra vista, que será ‘app/views/posts/index.ctp’, sí, sólo necesitamos una vista, con el código siguiente:

<?php
//Esto es obligatorio para incluir las librerías y poder usarlas.
echo $javascript->link(‘prototype.js’);
echo $javascript->link(‘scriptaculous.js’);
?>
<h1>Lista de Posts</h1>
<!–Div a actualizar, lo que este dentro es lo que se recargara–>
<div id=’posts’>
<table>
<tr>
<th>Id</th><th>Titulo</th><th>Acciones</th>
</tr>
<?php foreach ($posts as $post): ?>
<tr>
<td><?php echo $post['Post']['id'];?></td>
<td><?php echo $post['Post']['titulo'];?></td>
<!–Enlace para eliminar un post, los parámetros son, (‘Texto del enlace’,'urlDeAcción/’.$id_del_post,
array(‘update’=>’div_a_actualizar’,'action’=>’acción_a_ejecutar’)) “Si existe alguna confusión en
esta parte, no duden en preguntar”–>
<td><?php echo  $ajax->link(‘Quitar’,'del/’.$post['Post']['id'], array(‘update’ => ‘posts’,'action’=>’del’));?></td>
</tr>
<?php endforeach; ?>
</table>
</div>
<h2>Añadir post</h2>
<?php
//Esto es un form AJAX, los parámetros son (‘urlDeAcción/’,'método’,array(‘update’=>’div_a_actualizar’))
echo $ajax->form(‘/add’, ‘post’, array(‘update’ => ‘posts’));
echo $form->input(‘titulo’);
echo $form->input(‘contenido’,array(‘type’=>’textarea’));
echo $form->submit(‘Añadir’,array(‘escape’=>false));
echo $form->end();
?>

Y eso es todo, ahora solo falta probarlo en nuestro navegador preferido.

Saludos y espero que les sea útil.

17
Sep
2009