L’ecosistema di Laravel è composto da tantissimi package e utility che rendono le nostre applicazioni e il loro relativo sviluppo molto semplice ed intuitivo. Oggi parliamo di Laravel Socialite, grazie al quale affiancheremo alla normale autenticazione anche quella tramite gli account di Facebook, Twitter, LinkedIn, Google, GitHub, GitLab e Bitbucket. Vediamo insieme come installare ed integrare Socialite nei nostri sistemi.

Laravel Socialite al millimetro

Vediamo insieme tutto ma proprio tutto ciò che ti serve sapere di Laravel Socialite

Installazione Laravel Socialite

Installare Laravel Socialite è estremamente facile, basterà infatti lanciare il seguente comando Composer:

composer require laravel/socialite

Una volta terminata l’installazione potremo subito passare alla configurazione del plugin.

Credenziali e Configurazione

Il primo step della configurazione non riguarda la nostra applicazione Laravel, bensì il servizio (o i servizi) tramite i quali vogliamo consentire agli utenti di effettuare il login. Difatti dovremmo innanzitutto creare le credenziali OAuth, il famoso protocollo standard che consente le autorizzazioni API in maniera sicura.

Una volta ottenute le credenziali OAuth, passiamo alla configurazione del nostro framework. Prendiamo come esempio l’utilizzo del login tramite Facebook. Inseriamo nel nostro sistema le credenziali ottenute precedentemente nel file .env, assegnandole alle seguenti variabili d’ambiente:

FACEBOOK_CLIENT_ID= Il vostro Client ID di Facebook

FACEBOOK_CLIENT_SECRET= La vostra Client Secret di Facebook

FACEBOOK_URL=http://localhost:8000/login/facebook/callback

 

Ovviamente, nel caso in cui volessimo dare la possibilità agli utenti della nostra applicazione di usare altri servizi per effettuare il login, come ad esempio Google, dovremmo ottenere le relative credenziali OAuth e aggiungerle al file .env assegnandole a nuove variabili d’ambiente.

Successivamente, nel config/services.php, aggiungiamo la seguente configurazione

return [

….

‘facebook’ => [

‘client_id’ => env(FACEBOOK_CLIENT_ID’),

‘client_secret’ => env(‘FACEBOOK_CLIENT_SECRET’),

‘redirect’ => env(‘FACEBOOK_URL’),

],

]

 

Route

Per permettere agli utenti di utilizzare il login tramite il servizio appena configurato avremo bisogno di due route, una per reindirizzare l’utente al provider OAuth e l’altra per ricevere la callback dal servizio dopo l’autenticazione:

\Http\Controllers\Auth\LoginController;

 

Route::get(‘login/facebook’, [LoginController::class, ‘redirectToProvider’]);

Route::get(‘login/facebook/callback’, [LoginController::class, ‘handleProviderCallback’]);

 

Controller

Le routes appena create puntano entrambe al controller LoginController, dove andremo a definire i seguenti metodi in cui utilizzeremo la facade Socialite che abbiamo configurato precedentemente:

<?php

 

namespace App\Http\Controllers\Auth;

 

use App\Http\Controllers\Controller;

use Laravel\Socialite\Facades\Socialite;

 

class LoginController extends Controller

{

/**

* Redirect the user to the Facebook authentication page.

*

* @return \Illuminate\Http\Response

*/

public function redirectToProvider()

{

return Socialite::driver(‘facebook’)->redirect();

}

 

/**

* Obtain the user information from Facebook.

*

* @return \Illuminate\Http\Response

*/

public function handleProviderCallback()

{

$user = Socialite::driver(‘’facebook)->user();

}

}

 

Possiamo anche migliorare il metodo handeProviderCallback(), gestendo la casistica nella quale l’account del servizio che sta effettuando il login non è presente nel nostro database utenti:

public function handleProviderCallback()

{

try {

 

$user = Socialite::driver(‘facebook’)->user();

$isUser = User::where(‘fb_id’, $user->id)->first();

 

If ($isUser) {

Auth::login($isUser);

return redirect(‘/dashboard’);

} else {

$createUser = User::create ([

‘name’ => $user->name,

‘email’ => $user->email,

‘fb_id’ => $user->id,

‘password’ => encrypt(‘admin@123’)

]);

 

Auth::login($createUser);

return redirect(‘/dashboard’);

}

 

} catch (Exception $exception) {

dd($exception->getMessage());

}

}

 

Integrazione del pulsante di login

Una volta ultimate tutte le configurazioni, non ci resta che aggiungere alla nostra interfaccia di login il pulsante per effettuare il login tramite Socialite. Ecco un semplice esempio realizzato con Tailwind CSS che possiamo aggiungere al nostro vista Blade:

<div class=”w-full”>

<a href=”{{ url(‘/login/facebook) }}”>

<button class=”w-full bg-blue-800 hover:bg-blue-900 text-white font-bold py-2 px-4     focus:outline-none focus:shadow-outline” type=”button”>

Login with Facebook

</button>

</a>

</div>

 

Introduzione a Tailwind: approfondimenti

Abbiamo visto insieme quanto è semplice integrare nella nostra applicazione Laravel il login tramite dei servizi esterni utilizzando Laravel Socialite. L’integrazione di questo package è estremamente veloce e grazie ad esso garantiremo ai nostri utenti un servizio ormai quasi indispensabile su tante piattaforme e app per effettuare registrazioni e login in maniera rapida  e sicura.