OAuth es un protocolo abierto y estandarizado para la autenticación en aplicaciones web, móviles y de escritorio. Muchas aplicaciones web como Github, Twitter, Facebook, Google Plus , etc. ofrecen la posibilidad de autenticar usuarios en sitios de terceros con sus credenciales propias haciendo uso de sus API’s.
Una de las grandes ventajas de esto es dar al usuario la capacidad de crear una cuenta en un nuevo servicio sin necesidad de tener que llenar nuevamente un formulario con toda su información personal, tan solo debe autorizar el uso de su información por medio de la API seleccionada y podrá registrarse con un par de clicks.
Eloquent Oauth
Se trata de un paquete que permite integrar fácilmente las API’s de las principales redes sociales con nuestro sistema de acceso en Laravel.
Instalación de Eloquent Oauth
Para instalar vía composer agregamos la siguiente al archivo composer.json
"adamwathan/eloquent-oauth-l5": "0.1.*"
Luego desde la consola ejecuta
$ composer update
Una vez instalado debemos agregar el service provider correspondiente al array de providers dentro de config/app.php
'AdamWathan\EloquentOAuthL5\EloquentOAuthServiceProvider',
También puedes crear un alias (opcional) dentro del mismo archivo
'OAuth' => 'AdamWathan\EloquentOAuth\Facades\OAuth',
Para crear las migraciones necesarias y el archivo de configuración del paquete ejecutamos con la ayuda de artisan el siguiente comando
$ php artisan eloquent-oauth:install
Nota: antes de continuar recuerda configurar la conexión a tu base de datos desde el archivo .env de tu aplicación.
Finalmente ejecutamos la migración
$ php artisan migrate
Creando una nueva app
En este ejemplo vamos a usar la API de Facebook, para ello debemos ingresar a https://developers.facebook.com/apps/ y crear una nueva app para obtener las credenciales de acceso.
Hacemos click en el botón superior derecho «Add a New App» y en nuestro caso podemos seleccionar la opción «Sitio Web».
Sigue las instrucciones y una vez que hayas creado tu app verás algo como esto
Configurando credenciales de acceso
Desde el archivo config/eloquent-oauth.php editamos del proveedor de Facebook de la siguiente manera con la información que obtuviste al crear la app en el paso anterior.
<?php return [ 'table' => 'oauth_identities', 'providers' => [ 'facebook' => [ 'client_id' => 'xxxxxxxxxxxxxxxxxxxx', 'client_secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'redirect_uri' => 'http://url_de_tu_proyecto/public/login', 'scope' => [], ], ], ];
debemos definir la ruta a la cual va a redireccionar la app de Facebook al momento de autorizar el acceso, en este caso será ‘login’
Login con Eloquent OAuth
Debemos crear una ruta que dirija al usuario hacia la app de Facebook
Route::get('auth', function(){ return OAuth::authorize('facebook'); });
y posteriormente la ruta que va a recibir la respuesta de la app (usando WelcomeController )
Route::get('login', 'WelcomeController@index');
Editamos un poco el método index del archivo WelcomeController.php
public function index()
{
OAuth::login('facebook');
dd(Auth::user());
}
Si ingresas a ruta_de_tu_proyecto/public/auth verás una ventana de autorización de facebook como esta
Una vez que aceptes o autorices a Facebook a compartir tu información de usuario la app te redirige nuevamente a la url de tu proyecto. Al usar OAuth::login(), el paquete se asegura por si solo de loguear al usuario, por eso al imprimir Auth::user() con var_dump(), o dd() podemos ver algo así
Se ha creado un nuevo usuario en el sistema, en mi caso con el id = 1, pero vamos a agregar un poco más de funcionalidad, si queremos capturar el nombre de usuario y el email podemos editar un poco la función de login
public function index() { OAuth::login('facebook', function($user, $details) { $user->name = $details->full_name; $user->email = $details->email; $user->save(); }); dd(Auth::user()); }
y vamos a auth nuevamente
Ahora se ha almacenado en la aplicación tanto el nombre como el email del usuario en el mismo registro (en mi caso id = 1).
Consideraciones
- Cada proveedor usa nombres diferentes para los campos de la información del usuario, en tal sentido cuando trates con un proveedor nuevo puedes imprimir el array $details para verificar.
- Algunos servicios como GitHub piden al momento de crear la app una url de redireccionamiento, usa la misma que ingresas en el archivo eloquent-oauth.php, ya que, muchos usan esto como un parámetro de seguridad para verificar la autenticidad del propietario de la app.
- Si tu sistema requiere de información adicional que no puedas conseguir con cualquiera de estos proveedores (como Facebook, Google, etc.) no te limites, permite que tus usuarios se registren de esta forma y crea un sistema donde puedan completar sus datos.
Proveedores soportados
Actualmente, según la información oficial del paquete, puedes trabajar con los siguientes proveedores.
- GitHub
- SoundCloud
- Strava
Lecturas recomendadas
- Sistema de autenticación de usuarios en Laravel
- Aprende a usar Eloquent el ORM de Laravel
- Composer, el gestor de dependencias de PHP
- OAuth Community Site
- GitHub : Eloquent OAuth
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.
Lección anterior Exportar hoja de calculo con Eloquent y Laravel Excel Lección siguiente Registro de errores con Laravel Log Viewer