Usuario:ManuelRomero/Laravel/autentificacion/ejemplo
De WikiEducator
< Usuario:ManuelRomero | Laravel | autentificacion
Revisión a fecha de 19:18 11 feb 2015; ManuelRomero (Discusión | contribuciones)
- 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
- muestraLogion()
- En este método queremos mostrar el formulario de login si el usuario no está autentificado, si no simplemente mostramos el formulario para que se loguee.
public function muestraLogin(){ //Si el usuario ya está autentificado directamente vamos a enviarle a la página inicial, y si no mostramos el menu if (Auth::check()){ return Redirect::to('/'); } return View::make('formularioLogin'); }
</source>
- Ahora haremos el vista formularioLogin.blade.php
<!DOCTYPE html> <!-- Desarrollo Web en Entorno Servidor --> <!-- Ejemplo Tienda Web: login.php --> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> {{ HTML::style('css/tienda.css') }} <link href="tienda.css" rel="stylesheet" type="text/css"> <title>Ejemplo Tema 4: Login Tienda Web</title> </head> <body> <div='erro'> {{-- Preguntamos si hay algún mensaje de error y si hay lo mostramos --}} @if(Session::has('mensaje_error')) {{ Session::get('mensaje_error') }} @endif </div> <div id='login'> {{ Form::open(array('url'=>'login')) }} <fieldset > <legend>Login</legend> <div class='campo'> {{ Form::label('nombre', 'Nombre de usuario') }} {{ Form::text('nombre', 'Sin nombre') }} </div> <div class='campo'> {{ Form::label('password', 'Password') }} {{ Form::text('password') }} </div> <div class='campo'> {{ Form::submit('validar') }} </div> </fieldset> {{ Form::close() }} </body> </html>
- Vemos como en este caso vamos a consultar a ver si hay un mensaje de error
- Si simplemente accediera al valor de la variable, a diferencia de smarty, aquí sí que me daría un error.
- Como usa css, copiamos el fichero tienda.css, en la carpeta /public/css/tienda.css
- validaLogin
- Este método contiene la validación de nuestro usuario
- Lo que queremos es que si se valida correctamente se indique un ok, si no que vuelva a mostrar la pantalla de validarse, y que me muestre un mensaje de error