laravel-5-eloquent-oauth

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.

facebook-app-new

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

facebook-app

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

facebook-authorization

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í

facebook-array

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

facebook-login-data

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.

  • Facebook
  • GitHub
  • Google
  • LinkedIn
  • Instagram
  • SoundCloud
  • Strava

Lecturas recomendadas 

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