Leggendo l’ottimo articolo di Christian su Socialite, mi è tornato in mente che qualche giorno fa mi sono ritrovato a cercare di capire come integrare nuovi driver per Socialite, in modo “invisibile” allo “sviluppatore finale”.
Mi sono così messo a fare qualche ricerca: nello specifico, il mio obiettivo era implementare un accesso tramite Instagram.
Come molti di voi forse già sanno, Socialite supporta pochissimi provider che si possono contare sulla dita di una mano. Precisamente:
- Twitter;
- Facebook;
- Github;
- Bitbucket;
- Google;
Eppure, davvero nessuno ha pensato ad una soluzione per includerne altri velocemente?
Inizialmente pensavo di dovermi mettere a scrivere del codice, ma poi ho scoperto SocialiteProviders.
SocialiteProviders, come puoi tu stesso vedere andando sul sito del progetto, si pone proprio l’obiettivo di fornire una serie di provider aggiuntivi rispetto a quelli già esistenti.
Se questa ti sembra una buona notizia, sappi che l’ottima notizia invece è che una volta che l’avrai installato e configurato non dovrai fare altro che usarlo esattamente come hai usato finora Socialite. Il che vuol dire che no, non dovrai modificare il codice scritto in precedenza, ma solo aggiungerne altro per il provider che cerchi.
In questo articolo ti spiegherò, molto velocemente, come creare installare ed usare in pochissimi minuti SocialiteProviders, accedendo alla mia applicazione tramite Instagram.
Installazione
Installare SocialiteProviders è una fesseria. Nel mio caso specifico, lo farò scegliendo semplicemente un provider di partenza (quello di Instagram).
Da terminale, installa per il tuo progetto la dipendenza socialiteproviders/instagram.
Così:
composer require socialiteproviders/instagram
Come puoi notare dall’immagine di seguito, partendo dal provider specifico è stato installato tutto il necessario per lavorare (incluso Socialite, che non ancora avevo incluso!)
Configurazione
Una volta installati i package necessari non devi fare altro che sistemare i vari file di configurazione adatti.
Partiamo da config/app.php. Qui dovrai aggiungere il Service Provider adatto all’array providers:
‘SocialiteProvidersManagerServiceProvider’,
facendo inoltre attenzione a rimuovere (basta commentarlo)
// ‘LaravelSocialiteSocialiteServiceProvider’
Ricorda inoltre di aggiungere la Facade di Socialite, se ne hai bisogno. Aggiungi all’array aliases l’elemento
‘Socialize’ => ‘LaravelSocialiteFacadesSocialite’
A questo punto, salva e chiudi il file. Passa quindi a app/Providers/EventServiceProvider.php. All’interno dell’array listen aggiungi il seguente elemento:
protected $listen = [
‘SocialiteProvidersManagerSocialiteWasCalled’ => [
‘SocialiteProvidersInstagramInstagramExtendSocialite@handle’
],
];
In modo tale da collegare l’handler adatto al provider scelto. Sarà proprio qui, inoltre, che in futuro aggiungerai eventualmente altri provider in base alla necessità.
La stringa
SocialiteProvidersInstagramInstagramExtendSocialite@handle
è ovviamente specifica per Instagram. Ogni provider, tuttavia, ha una sua procedura di installazione. Considera comunque che sarà sempre più o meno uguale, quindi non temere.
Adesso, prima di usare il provider, non rimane altro che specificare le credenziali ottenute registrando una nuova applicazione sul portale sviluppatori di Instagram.
Dove? Nel file config/services.php:
‘instagram’ => [
‘client_id’ => ‘il_tuo_client_id’,
‘client_secret’ => ‘il_tuo_client_secret’,
‘redirect’ => ‘il_redirect_url_scelto’
],
Fine!
Nota: in questo caso le ho messe direttamente nel file di configurazione, ma nulla ti vieta di usare dotenv se preferisci.
Uso del Provider
Usare il provider è la cosa più semplice in assoluto. Nel mio caso specifico ecco un paio di route di esempio che rendono l’idea.
Route::get(‘login’, function(){
return Socialize::with(‘instagram’)->redirect();
});
Route::get(‘redirect’, function(){
$user = Socialize::with(‘instagram’)->user();
dd($user);
});
Come puoi notare, ho tranquillamente usato Socialite come se non fosse successo nulla, specificando con with il provider instagram. Una volta effettuato l’accesso, l’utente viene reindirizzato su /redirect, dove vengono gli vengono mostrati i suoi dati.
Et voilà!
Buon lavoro, e sbizzarritevi 🙂