Diferencia entre revisiones de «Usuario:ManuelRomero/Laravel/autentificacion/ejemplo»

De WikiEducator
Saltar a: navegación, buscar
Línea 53: Línea 53:
 
  php artisan migrate
 
  php artisan migrate
 
*Y  observamos como nos ha creado la tabla con los campos deseados.
 
*Y  observamos como nos ha creado la tabla con los campos deseados.
*Ahora poblamos la tabla con tres usuarios:
+
*Ahora poblamos la tabla de usuarios y tocaremos un modelo para hacerlo
 +
==Creando el modelo===
 +
*Si vamos a la carpeta de models, vemos que existe un modelo creado llamado '''''users'''''. Este modelo se ha creado por que está asociado a la clase Auth que a continuación comentaremos. Para personalizar un poco todo y entender mejor el proceso vamos a modificar este modelo y llamarle '''''Usuario''''' y a la tabla asociada al modelo usuarios
 +
*Esto lo hacemos cambiando en el nombre del fichero
 +
/app/Models/User.php lo cambiamos a /app/Models/Usuario.php
 +
*Dentro del fichero donde ponía
 +
<source lang=php>
 +
...
 +
class User extends Eloquent ...
 +
...
 +
protected $table = 'users';
 +
..
  
 +
</source>
 +
*Ponemos
 +
<source lang=php>
 +
...
 +
 +
class Ususario extends Eloquent ...
 +
...
 +
protected $table = 'usuarios';
 +
...
 +
</source>
 +
 +
*Ahora que ya tenemos el modelo Usuario con su tabla, que previamente hemos creado vamos a poblarla
 +
===Poblando la tabla===
 +
*Para ello como ya sabemos en la carpeta seed, cremos una nuevo clase que extienda de Seeder; por ejemplo la llamamos PoblarUsuariosSeeders, y usando el modelo dentro del método run, creamos un nuevo registros
 +
*OBservamos que usamos la clase Hash para cifrar el contenido de la password
 +
<source lang=php>
 +
class PoblarUsuariosSeeders extends Seeder {
 +
    //put your code here
 +
    public function run()
 +
    { //Usando el modelo creamos un nuevo registro. Tambien se puede hacer con el método save
 +
      Usuario::create(array(
 +
            'usuario'  => 'manolo',
 +
            'email'    => 'admin@admin.com',
 +
            'password' => Hash::make('manolo') // Hash::make() nos va generar una cadena con nuestra contraseña encriptada
 +
    }
 +
}
 +
*Para llamar a este método modificamos el método run de la clase '''''DataBaseSeeder.php
 +
<source lang=php
 +
...
 +
public function run()
 +
{
 +
Eloquent::unguard();
 +
                $this->call('DatosUsuarios'); //Esta es la línea que añadimos
 +
        }
 +
...
 +
</source>
 +
*Ahora ejecutando desde la consola con artisan tendremos el nuevo registro creado
 +
php artisan db
 +
*Verificamos que tenemos el registro creado
 +
===Auth.php===
 +
Como hemos modificao el modelo, vamos a indicar a la clase de autentificación cual es el modelo que usaremos para autentificar usuarios que sera '''''Usuario'''''
 +
<source lang=php>
 +
...
 +
 +
'model' => 'Usuario',
 +
...
 +
'table' => 'usuarios',
 +
</source>
 +
*De momento no tocamos la gestion de como recordar la  password
 +
===Preparando las rutas===
 +
*Para este ejemplo vamos a tener la siguiente sitiación
 +
*Un usuario solo puede acceder al sitio web si previamente se ha identificado
 +
*Para identificarse usaremos el login que tenemos de la tienda
 +
*Una vez logueado le daremos la opción de desloguearse
 +
*No lo hemos visto anteriormente pero es muy intuitivo, y es el tema de los filtros
 +
*En este caso le estamos diciendo que existen ciertas rutas que solo cargará si el usuario previamente se ha identificado
 +
*Con solo hacer esto no tenemos que validar el usuario ante ninguna acción.
 +
*El código es tan sencillo como
 +
<source lang=php>
 +
Route::get('/', ['before'=>'auth']
 +
</source>
 +
<source lang=php><?php
 +
 +
// Nos mostrará el formulario de login.
 +
Route::get('login', 'AuthController@showLogin');
 +
 +
// Validamos los datos de inicio de sesión.
 +
Route::post('login', 'AuthController@postLogin');
 +
 +
// Nos indica que las rutas que están dentro de él sólo serán mostradas si antes el usuario se ha autenticado.
 +
Route::group(array('before' => 'auth'), function()
 +
{
 +
    // Esta será nuestra ruta de bienvenida.
 +
    Route::get('/', function()
 +
    {
 +
        return View::make('hello');
 +
    });
 +
    // Esta ruta nos servirá para cerrar sesión.
 +
    Route::get('logout', 'AuthController@logOut');
 +
});
 +
 +
</source>
 
   
 
   
 
*Usaremos el formulario usado para la tienda
 
*Usaremos el formulario usado para la tienda
 
*Para ello usaremos tienda.css. Este fichero lo debemos copiar en la carpeta  
 
*Para ello usaremos tienda.css. Este fichero lo debemos copiar en la carpeta  
 
/public/css/tienda.css
 
/public/css/tienda.css
 +
*Creando los controladores
 +
php artisan controller:make Autentificacion
 +
php artisan controller:make Accion
 +
*Incluimos los métodos especificados en el router.php dentro de los controladores

Revisión de 19:04 11 feb 2015


  • A continuación vamos a realizar un sistema de logín donde vemos todos los conceptos
  • Crearemos el proyecto indicando todos los pasos

Creando el proyecto

  • Creamos un proyecto nuevo
composer create-project laravel/laravel=4.2 autentificacion 
  • Configuramos la base de datos para crear en ella la tabla de usuarios
  • Realizamos la siguiente configuración
'seguridad' => array(
			'driver'    => 'mysql',
			'host'      => 'localhost',
			'database'  => 'tienda',
			'username'  => 'root',
			'password'  => 'root',
			'charset'   => 'utf8',
			'collation' => 'utf8_unicode_ci',
			'prefix'    => '',
		),
  • Creamos las tablas con migration
php artisan migration:make tablaUsuarios
php artisan migration
  • Editamos el fichero que ha creado la migración y añadimos los campos que necesitamos en el método up
...
public function up(){
          Schema::create('usuarios', function($table){
             $table->increments('id');
             $table->string('password');
             $table->string('email');
             $table->string('usuario');
             $table->timestamps();
             $tabla->rememberToken();
        });
}
public function down(){
       Shema::drop('usuarios');
}
 
*Ahora ejecutamos la migración para que se cree la tabla
 php artisan migrate
*Ahora añadimos el campo para poder recordar el usuario conectado
 php artisan migrate:make tablaUsuarios2
*Cargamos lo que queremos que se ejecute en el método up del nuevo fichero creado
<source lang=php>
....
 Schema::table('usuarios', function($tabla){
            $tabla->rememberToken();                                
 });
  • Ejecutamos la migracion
php artisan migrate
  • Y observamos como nos ha creado la tabla con los campos deseados.
  • Ahora poblamos la tabla de usuarios y tocaremos un modelo para hacerlo

Creando el modelo=

  • Si vamos a la carpeta de models, vemos que existe un modelo creado llamado users. Este modelo se ha creado por que está asociado a la clase Auth que a continuación comentaremos. Para personalizar un poco todo y entender mejor el proceso vamos a modificar este modelo y llamarle Usuario y a la tabla asociada al modelo usuarios
  • Esto lo hacemos cambiando en el nombre del fichero
/app/Models/User.php lo cambiamos a /app/Models/Usuario.php
  • Dentro del fichero donde ponía
...
class User extends Eloquent ...
...
protected $table = 'users';
..
  • Ponemos
...
 
class Ususario extends Eloquent ...
...
protected $table = 'usuarios';
...
  • Ahora que ya tenemos el modelo Usuario con su tabla, que previamente hemos creado vamos a poblarla

Poblando la tabla

  • Para ello como ya sabemos en la carpeta seed, cremos una nuevo clase que extienda de Seeder; por ejemplo la llamamos PoblarUsuariosSeeders, y usando el modelo dentro del método run, creamos un nuevo registros
  • OBservamos que usamos la clase Hash para cifrar el contenido de la password
class PoblarUsuariosSeeders extends Seeder {
    //put your code here
     public function run()
    { //Usando el modelo creamos un nuevo registro. Tambien se puede hacer con el método save
       Usuario::create(array(
            'usuario'  => 'manolo',
            'email'     => 'admin@admin.com',
            'password' => Hash::make('manolo') // Hash::make() nos va generar una cadena con nuestra contraseña encriptada
    }
}
*Para llamar a este método modificamos el método run de la clase '''''DataBaseSeeder.php
<source lang=php
...
	public function run()
	{
		Eloquent::unguard();
                $this->call('DatosUsuarios'); //Esta es la línea que añadimos
        }
...
  • Ahora ejecutando desde la consola con artisan tendremos el nuevo registro creado
php artisan db
  • Verificamos que tenemos el registro creado

Auth.php

Como hemos modificao el modelo, vamos a indicar a la clase de autentificación cual es el modelo que usaremos para autentificar usuarios que sera Usuario

...
 
	'model' => 'Usuario',
...
	'table' => 'usuarios',
  • De momento no tocamos la gestion de como recordar la password

Preparando las rutas

  • Para este ejemplo vamos a tener la siguiente sitiación
  • Un usuario solo puede acceder al sitio web si previamente se ha identificado
  • Para identificarse usaremos el login que tenemos de la tienda
  • Una vez logueado le daremos la opción de desloguearse
  • No lo hemos visto anteriormente pero es muy intuitivo, y es el tema de los filtros
  • En este caso le estamos diciendo que existen ciertas rutas que solo cargará si el usuario previamente se ha identificado
  • Con solo hacer esto no tenemos que validar el usuario ante ninguna acción.
  • El código es tan sencillo como
Route::get('/', ['before'=>'auth']
<?php
 
// Nos mostrará el formulario de login.
Route::get('login', 'AuthController@showLogin');
 
// Validamos los datos de inicio de sesión.
Route::post('login', 'AuthController@postLogin');
 
// Nos indica que las rutas que están dentro de él sólo serán mostradas si antes el usuario se ha autenticado.
Route::group(array('before' => 'auth'), function()
{
    // Esta será nuestra ruta de bienvenida.
    Route::get('/', function()
    {
        return View::make('hello');
    });
    // Esta ruta nos servirá para cerrar sesión.
    Route::get('logout', 'AuthController@logOut');
});
  • Usaremos el formulario usado para la tienda
  • Para ello usaremos tienda.css. Este fichero lo debemos copiar en la carpeta

/public/css/tienda.css

  • Creando los controladores
php artisan controller:make Autentificacion
php artisan controller:make Accion
  • Incluimos los métodos especificados en el router.php dentro de los controladores