La autenticación en Laravel es un proceso que nos permite comprobar que el usuario es quien dice ser, por medio de un nombre de usuario o una dirección de e-mail y una contraseña.

usuarios laravel

En este tutorial vamos a hacer un pequeño sistema de autenticación usando una instalación limpia de Laravel 4.2 así que comencemos primero por instalar Laravel en un proyecto nuevo. Tenemos para Uds. tutoriales de cómo instalar Laravel de manera local en Linux, Windows o utilizando Laravel Homestead.

Migraciones y Seeders de la tabla de usuarios

Una vez que hayamos instalado Laravel empezaremos creando nuestras migraciones, esto lo haremos ejecutando en consola los siguientes comandos

$ php artisan migrate:install
$ php artisan migrate:make create_users_table --create=users

Esto, primero que nada, nos creará la tabla migrations en la base de datos y después nos creará un archivo en la carpeta app/database/migrations con un nombre similar a: 2014_11_15_065341_create_users_table.php (al principio nos pone la fecha y hora de cuándo se creó dicho archivo), luego modificamos ese archivo para que nos quede como el siguiente código:

increments('id');
            $table->string('first_name');
            $table->string('last_name');
            $table->string('username')->unique();
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }

}

Esto nos permitirá crear una tabla llamada users que contenga como datos los nombres, un username, e-mail, password y el campo remember_token, que como podemos ver en la documentación oficial de Laravel nos servirá para saber si queremos que el sistema recuerde nuestros datos y mantenga la sesión abierta.

A continuación procedemos a teclear en la consola el comando necesario para ejecutar la migración y nos cree la tabla en la base de datos.

php artisan migrate

Ahora debemos llenar la tabla con al menos un usuario, para ello vamos a crear un archivo llamado UserTableSeeder.php el cual deberá estar guardado en nuestra carpeta app/database/seeds y debe contener un código similar al siguiente:

 'System',
            'last_name'  => 'Administrator',
            'username'   => 'admin',
            'email'      => '[email protected]',
            'password'   =>  Hash::make('secret')
        ]);
    }

}

Luego llamamos al seeder para que guarde al usuario en la tabla pero antes de eso debemos modificar el archivo DatabaseSeeder.php y descomentamos la línea 14. Una vez que esté descomentada hacemos el llamado al seeder en la consola tecleando lo siguiente:

php artisan db:seed

Rutas para autenticar a un usuario

Una vez creado el usuario empezaremos a definir las rutas, dado que esta es una instalación limpia de Laravel utilizaremos la vista hello.blade.php como ejemplo de ruta privada, es decir una ruta que sólo puede ser accedida por los usuarios autenticados.

En nuestro archivo routes.php localizado en la carpeta app/ tenemos que agregar 3 rutas nuevas, una para mostrar la ventana de login, otra (por el método POST) para verificar los datos una vez que llenemos el formulario y una última para finalizar la sesión, nuestras rutas deberán quedar como se ve a continuación.

 'auth'], function()
{
    Route::get('/', 'HomeController@showWelcome'); // Vista de inicio
});

Noten que cada una de las rutas hace llamado al controlador AuthController.php el cuál veremos a continuación.

Controlador de usuarios


El controlador hará todas las funciones indicadas por las rutas, las cuales, en primer lugar, mostrarán el formulario para ingresar el usuario y contraseña, en segunda validará nuestros datos y por último finalizará la sesión activa, notemos el siguiente código:

Crea el controlador en app/controllers/AuthController.php

 Input::get('username'),
            'password' => Input::get('password')
        ];

        // Verificamos los datos
        if (Auth::attempt($data, Input::get('remember'))) // Como segundo parámetro pasámos el checkbox para sabes si queremos recordar la contraseña
        {
            // Si nuestros datos son correctos mostramos la página de inicio
            return Redirect::intended('/');
        }
        // Si los datos no son los correctos volvemos al login y mostramos un error
        return Redirect::back()->with('error_message', 'Invalid data')->withInput();
    }

    public function logOut()
    {
        // Cerramos la sesión
        Auth::logout();
        // Volvemos al login y mostramos un mensaje indicando que se cerró la sesión
        return Redirect::to('login')->with('error_message', 'Logged out correctly');
    }

}

El método showLogin nos hará una verificación para saber si ya tenemos una sesión abierta, si hay una abierta nos mandará a la página de inicio, en este caso la vista hello.blade.php, si no hay sesión abierta nos mandará al formulario de inicio de sesión, en este caso la vista login.blade.php que crearemos en un momento.

El método postLogin nos verificará los datos que ingresemos en el login y los comparará con lo que tengamos guardado en la base de datos, luego, si los datos ingresados son los correctos, nos mandará a la página de inicio, si los datos son incorrectos nos regresará al formulario y nos mostrará un mensaje indicando que los datos son incorrectos. También le enviaremos un tercer dato («remember») que tendremos en el formulario para saber si queremos que recuerde nuestros datos o no.

El método logOut nos servirá para cerrar la sesión y una vez cerrada nos mandará nuevamente al login y nos mostrará el mensaje indicando que se ha cerrado la sesión exitosamente.

Plantilla de login con Laravel

Ahora vamos a crear las vistas necesarias, en este caso ya tenemos la vista hello.php, modificaremos el nombre para que se llame hello.blade.php y al final añadiremos un link para poder cerrar la sesión, deberá quedar mas o menos así.

You have arrived.

Log out

Por el momento ese será el único cambio que hagamos en nuestra vista hello, ahora pasaremos a hacer la vista login.blade.php, la cual contrará tan solo con un formulario que contenga los campos de texto, un checkbox y un botón, algo similar a lo siguiente.




    
    Authenticate with Laravel 4.2


    
{{ Form::open(['url' => 'login']) }} @if(Session::has('error_message')) {{ Session::get('error_message') }} @endif

Log in

{{ Form::label('username', 'Username') }} {{ Form::text('username') }} {{ Form::label('password', 'Password') }} {{ Form::password('password') }} {{ Form::submit('Log in', ['class' => 'btn btn-primary btn-block']) }} {{ Form::close() }}

Con esto ya tendrán su sistema de autenticación funcionando, pueden probarlo en la URL que hayan configurado para este proyecto.

Ahora solo es cuestión de darle estilo, pueden probar con el repositorio que hice en Github, el cuál está hecho con la plantilla demo de bootstrap:

https://github.com/dimitriacosta/laravel-login

Laravel Bootstrap

Cualquier duda, sugerencia o comentario pueden dejarlas en la parte inferior de este post o hacérmelo llegar vía twitter a @dimitri_acosta

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Cómo instalar Composer y Laravel en Windows Lección siguiente Aprende cómo validar datos con Laravel