Laravel logo

Kort intro – kom igång med Laravel Socialite

Det kom en fråga, på Laravel Sverige gruppen på Facebook igår kväll, om hur man lätt kommer igång med Laravels Socialite.
Eftersom jag ganska nyligen själv suttit och testat Socialite så tänkte jag att jag skulle slänga ihop en kort och konkret tutorial på hur man kommer igång.

Först, vad är Laravel Socialite?

Det är helt enkelt ett composer paket för att enkelt kunna implementera inloggning/autentisering på sin applikation mot olika sociala-nätverk. Det är på inget sätt en komplett lösning för integration av ex Facebook, men den sköter inloggning genom facebook enkelt.

Det här exemplet är för att implementera FB-login (det som efterfrågades) och förutsätter att du har en FB App uppsatt. Men det är lika lätt att implementera något av de andra nätverken som just nu stöds, enligt docsen: ”Socialite currently supports authentication with Facebook, Twitter, Google, GitHub and Bitbucket.”.
Så nu kör vi, tre enkla steg att komma igång med Socialite!

Steg 0

Först av allt måste du lägga till Socialite i din composer.json fil.

"require": {
   "laravel/framework": "~5.0",
    "laravel/socialite": "~2.0"
}

Steg 1

Sedan måste du lägga till ”Laravel\Socialite\SocialiteServiceProvider” i din config/app.php fil och alternativt även ”
’Socialize’=> ’Laravel\Socialite\Facades\Socialite’ ifall du vill använda dig av Socialize:: facaden.

Nästa steg är att sätta dina inställningar i config/services.php. När du öppnar filen ser du inställningar för bl.a mailgun, mandrill, stripe och det är här du lägger till fler för de sociala nätverk du tänker använda. I vårat exempel betyder det.

'facebook' => [
   'client_id' => 'DIN-CLIENT_ID',
   'client_secret' => 'DIN-CLIENT-SECRET',
   'redirect' => 'URL-EFTER-SIGNIN',
]

Uppgifterna för client_id och client_secret får du från inställningarna för din Facebook App och redirect är den url dit facebook skickar användaren, eller rättare sagt användarens data, efter att denne loggat in & godkänt din webbplats. Denna url skulle exempelvis kunna vara http://website.dev/oauth-signin/facebook/.

Steg 2

För att nu kunna logga in genom facebook och ta emot användarens data måste vi skapa några enkla routes, öppna app/Http/routes.php.

Route::get('/signin/{social}','HomeController@index');
Route::get('/oauth-signin/{social}', 'HomeController@callbacked');

Dessa två är bara exempel, den första för att skicka oss till Facebook och den andra är redirect URL:en vi definierade ovan. Parametern {social} använder jag bara för att enkelt skilja på olika sociala-nätverk och på så vis kunna göra olika saker i backend beroende på tjänst användaren vill använda.

Steg 3

Nu saknas bara två små saker för att det hela ska fungera. I din HomeController (eller vilken controller du nu vill använda), skapar du metoderna index och callbacked. Dessa två skall se ut som nedan.

public function index($social)
{
   return \Socialize::with($social)->redirect();
}

public function callbacked($social)
{
   $user = \Socialize::with($social)->user();
}

Som du ser tar vi emot social parametern i våra funktioner och använder den sedan i Socialize facaden. Undersöker man Laravels dokumentation så står det ”return Socialize::with(’github’)->redirect();”. I mitt fall vill jag inte hårdkoda värdet för ex. github eller facebook, därför använder en route-parameter för att skicka in värdet och använda i Socialize metoden.

Socialize i index metoden skickar användaren vidare till det sociala-nätverk man valt, där de får logga in och godkända vår webbplats/applikation och skickas sedan till redirect URL:en som tas emot av callbacked metoden. Här hämtar vi uppgifter som användaren som vi sedan kan spara ex. i en databas.
Vill du se vad du får för data tillbaka, kan du slänga in en

dd($user);

sist i callbacked metoden.