lunes, 14 de diciembre de 2015

24 - Tutorial de Laravel 5 - OAuth2 Socialite (Facebook & Google)




En este capítulo del Tutorial de Laravel 5 veremos como podemos integrar servicios como Google y Facebook para autenticar usuarios en nuestra aplicación.


Lo primero es crear ambas aplicaciones para obtener las claves de acceso a las apis de Facebook y Google, el proceso de creación de las aplicaciones se muestran al inicio del vídeo.


Seguiremos las instrucciones de la documentación de Laravel para instalar Socialite a través de composer, Socialite nos ofrece soporte para los siguientes proveedores: Facebook, Twitter, LinkedIn, Google, GitHub y Bitbucket.


Abrir una consola, ir a la raíz del proyecto laravel, en el vídeo se utiliza composer.phar para su instalación y ejecutar el siguiente comando ...


php composer.phar require laravel/socialite


Agregar el nuevo proveedor y el alias en el archivo "config\app.php" ...


//Providers
Laravel\Socialite\SocialiteServiceProvider::class,

//Aliases
'Socialite' => Laravel\Socialite\Facades\Socialite::class,


Agregar las credenciales de acceso a los servicios de google y facebook en el archivo "config\service.php" ...


 'facebook' => [
  'client_id' => '',
  'client_secret' => '',
  'redirect' => 'http://localhost/tutorial-laravel/public/social/callback/facebook',
 ],
 
 'google' => [
  'client_id' => '',
  'client_secret' => '',
  'redirect' => 'http://localhost/tutorial-laravel/public/social/callback/google',
 ],


Crear un nuevo controlador llamado "SocialController.php" con el siguiente código ...


<?php 

namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\User;
use Auth;
use Socialite;

class SocialController extends Controller {

    public function __construct(){
     $this->middleware('guest');
    }

       public function getSocialAuth($provider=null)
       {
           if(!config("services.$provider")) abort('404');

           return Socialite::driver($provider)->redirect();
       }


       public function getSocialAuthCallback($provider=null)
       {
          if($user = Socialite::driver($provider)->user()){
             dd($user);  
          }else{
             return '¡¡¡Algo fue mal!!!';
          }
       }
}


A este controlador sólo tendrán acceso los usuarios invitados, la acción getSocialAuth es la encargada de realizar la petición al proveedor y la acción getSocialAuthCallback es la encargada de obtener la respuesta con los datos del usuario.


Agregaremos las nuevas rutas en routes.php ...


//Social Login
Route::get('social/{provider?}', 'SocialController@getSocialAuth');
Route::get('social/callback/{provider?}', 'SocialController@getSocialAuthCallback');


El argumento provider es opcional y tendrá como valor el nombre del proveedor a acceder, en nuestro caso, Google ó Facebook.


En el vídeo se comenta la posibilidad de obtener un error en Windows al obtener la respuesta de los proveedores "cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html ...", para solventar este error descargaremos el siguiente certificado ... cacert.pem, lo guardaremos en la carpeta "xampp", abriremos la carpeta php y abriremos el archivo "php.ini" para agregar la siguiente línea al final ...

curl.cainfo = "C:\xampp\cacert.pem"

Guardar el archivo y reiniciar nuevamente apache.


Para ver la prueba agregaremos dos links a la vista "auth\login.blade.php" para acceder a los proveedores ...


 ...
 <br />
 <a href='{{url("social/facebook")}}'>Iniciar sesión con Facebook</a>
 <br />
 <a href='{{url("social/google")}}'>Iniciar sesión con Google</a>


Ahora prueben a iniciar sesión con Facebook ó Google para ver como los proveedores te solitican la primera vez que permitas a la aplicación tener información tuya y como posteriormente te redirecciona mostrando la información de usuario.