Facebook PHP SDK: rejestracja i logowanie
![](http://blog.brakoniecki.pl/wp-content/uploads/2015/01/facebooksdk-375x210.png)
Temat następnego artykułu nasunął się sam. Właśnie uporałem się z tym zagadnieniem, realizując na własne potrzeby logowanie i rejestrację z wykorzystaniem konta Facebook. Temat z pozoru wydaje się nieco skomplikowany, jednak po zrozumieniu pewnych mechanizmów okazuje się, że nie jest to takie trudne. Możliwości Facebook SDK są naprawdę spore, my zaczniemy jednak od prostych zastosowań.
Założenia
- Facebook PHP SDK w wersji 4.0 (https://developers.facebook.com/docs/reference/php/4.0.0?locale=pl_PL)
- PHP 5.4 lub nowsze – wymagane przez SDK Facebooka
- konta użytkowników trzymamy w bazie danych; tabela z użytkownikami prócz pól loginu i hasła powinna zawierać także pola: adres e-mail oraz facebook_id, jak na poniższym przykładzie:
user_id | username | password | email | facebook_id | inne_pola…
Logowanie i rejestracja za pomocą Facebook w teorii
W zasadzie zarówno logowanie jak i rejestracja sprowadzają się w większości do tego samego: pobrania danych użytkownika z portalu Facebook. Dalsze czynności zależą już tylko od tego, do czego mają nam służyć zdobyte informacje.
W przypadku rejestracji będziemy chcieli sprawdzić w pierwszej kolejności, czy bieżące konto Facebook zostało już użyte do założenia konta na naszej stronie. Zbadamy to sprawdzając, czy w naszej bazie danych w polach email oraz facebook_id istnieją już dane, które uzyskaliśmy. Jeśli nic nie zostało znalezione, wówczas możemy zarejestrować naszego użytkownika. Dodajemy nowy rekord do bazy danych, zawierający pobrane z Facebooka informacje (email, facebook_id, name). O tym, co można pobrać za pomocą Facebook API napiszę w dalszej części wpisu.
Logowanie polega na weryfikacji, czy dane bieżącego konta Facebook znajdują się już w bazie danych. Jeśli tak, to możemy zalogować użytkownika.
Rejestracja:
- Pobranie danych konta Facebook
- Sprawdzenie, czy użytkownik o takich danych jeszcze nie istnieje
- Jeśli nie – rejestrujemy go
Logowanie:
- Pobranie danych konta Facebook
- Sprawdzenie, czy użytkownik o takich danych już istnieje
- Jeśli tak – logujemy go
Pobranie danych za pomocą Facebook API:
- Użytkownik klika w link logowania, wygenerowany przez SDK.
- Pojawia się okno logowania w portalu Facebook. Jeśli użytkownik jest już zalogowany, ten punkt jest pomijany.
- Pojawia się okno uruchomienia aplikacji dla danego konta użytkownika, gdzie są wyszczególnione wszystkie uprawnienia, których wymaga nasza aplikacja. Jeśli użytkownik już zaakceptował wymagania aplikacji, ten punkt jest pomijany.
- Użytkownik jest przekierowywany z powrotem na wskazany adres.
Utworzenie aplikacji na Facebooku
- Wchodzimy na stronę https://developers.facebook.com/apps/ i wciskamy przycisk „Add a New App”.
- Wybieramy platformę, w tym przypadku będzie to strona internetowa.
- Wpisujemy nazwę, jaką chcemy nadać aplikacji. Wyskoczy okienko szczegółów aplikacji. Wybieramy kategorię z listy, a następnie klikamy „Create App ID”.
- Poniżej pojawi się kod do wstawienia na stronę – pomijamy go, gdyż dotyczy JavaScript SDK. Przewijamy niżej i wypełniamy dwa pola adresem strony internetowej, gdzie chcemy wdrożyć rejestrację i logowanie. Naciskamy „Dalej”.
- Wracamy do listy aplikacji. W górnym menu naciskamy „My Apps”. Wybieramy naszą aplikację.
- W zakładce „Settings” wpisujemy adres email w polu „Contact Email” i zapisujemy.
- W zakładce „Status & Review” ustawiamy przełącznik „Do you want to make this app and all its live features available to the general public?” w pozycji „Yes”.
- Nasza aplikacja jest gotowa.
Podłączenie SDK do strony internetowej
- Pobieramy Facebook PHP SDK ze strony: https://developers.facebook.com/docs/php/gettingstarted/4.0.0?locale=pl_PL.
- Ze ściągniętej paczki będziemy potrzebować:
- plik autoload.php
- folder src
- Niezbędne pliki dołączamy do plików naszej strony WWW. Należy pamiętać o zależności między plikiem autoload.php a folderem src. Jeśli zmienimy nazwę folderu lub jego położenie, trzeba będzie zmienić ścieżkę w pliku autoload.php.
Uniwersalny kod na pobranie danych użytkownika
//dołączamy plik autoload.php, aby zaimportować wszystkie pliki SDK require_once 'autoload.php'; //deklarujemy użycie niezbędnych przestrzeni nazw (zawartych w plikach Facebook PHP SDK) use Facebook\FacebookSession; use Facebook\FacebookRequest; use Facebook\FacebookResponse; use Facebook\GraphUser; use Facebook\FacebookRequestException; use Facebook\FacebookRedirectLoginHelper; //defiujemy stałe z danymi naszej aplikacji define ('FACEBOOK_APP_ID', 'XXXXXXXXXX'); define ('FACEBOOK_APP_SECRET', 'XXXXXXXXXXXXXXX'); define ('FACEBOOK_REDIRECT_URL', 'http://example.com/page.html'); //wskazujemy, że dla bieżącej sesji będziemy używać aplikacji o następujących danych FacebookSession::setDefaultApplication(FACEBOOK_APP_ID, FACEBOOK_APP_SECRET); //tworzymy obiekt klasy FacebookRedirectLoginHelper - posłuży do wygenerowania linku logowania $oRedirectLoginHelper = new FacebookRedirectLoginHelper(FACEBOOK_REDIRECT_URL); if (isset($_SESSION) && isset($_SESSION['fb_token'])) { //jeśli mamy token to próbujemy odtworzyć sesję logowania $oSession = new FacebookSession($_SESSION['fb_token']); try { //jeśli sesja nie jest już ważna if (!$oSession->validate()) { //czyścimy obiekt sesji $oSession = null; } } catch(Exception $e) { //czyścimy obiekt sesji w przypadku problemów $oSession = null; } } elseif (empty($oSession)) { //obiekt sesji jest pusty try { //pobieramy obiekt sesji logowania $oSession = $oRedirectLoginHelper->getSessionFromRedirect(); } catch(FacebookRequestException $ex) { //wyświetlamy błąd zwrócony przez API, jeśli wystąpił echo $ex->getMessage(); } catch(\Exception $ex) { //wyświetlamy pozostałe błędy echo $ex->getMessage(); } } //sprawdzamy, czy sesja logowania jest aktywna if ($oSession) { //pobieramy AccessToken sesji - przyda się później $oAccessToken = $oSession->getToken(); //możemy zapisać go w bieżącej sesji $_SESSION['fb_token'] = $oAccessToken; //tworzymy obiekt zapytania do Facebooka - pytamy o "/me", czyli dane zalogowanego użytkownika $oRequest = new FacebookRequest($oSession, 'GET', '/me'); //wykonujemy zapytanie i przypisujemy do zmiennej; $oResponse zawiera odpowiedź od Facebooka $oResponse = $oRequest->execute(); //wyciągamy z obiektu odpowiedzi GraphObject i zamieniamy do na tablicę asocjacyjną $aGraphArray = $oResponse->getGraphObject()->asArray(); //w tym momencie $aGraphArray zawiera tablicę z danymi użytkownika //tutaj możemy wykonać dalsze czynności logowania lub rejestracji } //niezależnie od istnienia sesji pobieramy link logowania //jako parametr przekazujemy tablicę wymaganych uprawnień //w przykładzie moja aplikacja wymaga tylko dostępu do adresu email //lista uprawnień: https://developers.facebook.com/docs/facebook-login/permissions/v2.2?locale=pl_PL $sLoginUrl = $oRedirectLoginHelper->getLoginUrl(array('email'));
Zwracane dane
Array ( [id] => facebookid [email] => example@domain.com [first_name] => Imię [gender] => male [last_name] => Nazwisko [link] => https://www.facebook.com/app_scoped_user_id/XXXXXXXXXXXXXXX/ [locale] => pl_PL [name] => Imię Nazwisko [timezone] => 1 [updated_time] => 2014-08-18T15:15:05+0000 [verified] => 1 )
W przykładzie zostały zwrócone standardowe dane oraz adres email (wymagane uprawnienie do uzyskania).
Podsumowanie
Przy pomocy SDK Facebooka można zdziałać naprawdę sporo. Możliwe jest pobranie praktycznie prawie wszystkich danych o użytkowniku, publikacja w jego imieniu czy nawet zarządzanie stronami. Po więcej informacji odsyłam do dokumentacji Facebooka pod adresem https://developers.facebook.com/.