Podczas prac nad jednym z ostatnich projektów spotkaliśmy się z problemem autentykacji użytkowników na stronie przez Google API. Jednak pomimo ogromnego zaangażowania community nie udało nam się znaleźć gotowego i działającego bundle’a przygotowanego dla Symfony 2.1, dlatego chcielibyśmy podzielić się jednym z wypracowanych przez zespół XSolve rozwiązań tego zagadnienia.
Podany niżej przykład implementuje jedynie logowanie za pomocą Google API, ale nic nie stoi na przeszkodzie, aby rozszerzyć go o rejestrację. Wystarczy w klasie service’u w przypadku braku użytkownika obsłużyć jego utworzenie.
Instalacja niezbędnych repozytoriów
Aby przejść do meritum omawianego w artykule problemu, należy przyjąć, że mamy do dyspozycji zainstalowane i prawidłowo skonfigurowane trzy bundle, w tym FOSUserBundle (https://github.com/FriendsOfSymfony/FOSUserBundle) używanego do obsługi użytkowników.
Zaczynamy od wprowadzenia bundli do composera:
“require”: {
“friendsofsymfony/user-bundle”: “*”,
“bitgandtter/google-api”: “dev-master”,
“bitgandtter/google-bundle”: “dev-master”,
},
A następnie z poziomu consoli aktualizujemy repozytoria przez
composer update;
Google OAuth 2.0
Zaczynamy od pozyskania klucza google w Google APIs Console pod adresem https://code.google.com/apis/console . Poniższe dane będą przydatne w konfiguracji aplikacji:

Konfiguracja
Po założeniu klucza API w Google przenosimy dane do konfiguracji w pliku app/config/parameters.yml :
Utworzenie service’u
Zgodnie z ideą Dependency Injection w Symfony 2 dla mechanizmów autoryzacji i autentykacji przez Google tworzymy osobny service.
Definiujemy go w pliku Xsolve/TestBundle/Resources/config/services.xml
Oraz tworzymy klasę service’u w Xsolve/TestBundle/Service/GoogleAuthorizationManager.php
Autentykacja Google działa na podobnych zasadach, jak Facebook API – wysyłamy żądanie przekierowując użytkownika na odpowiedni adres po stronie Google, a w odpowiedzi otrzymujemy specjalny token zawarty w parametrze code, dzięki któremu biblioteka może pobrać dane o użytkowniku.
Controller
Na końcu pozostaje nam zdefiniowanie controllera obsługującego akcję:
Teraz wystarczy sprawdzić jedynie działanie skryptu. W tym celu należy utworzyć button logowania przekierowujący użytkownika pod adres /oauth2callback .
Have fun!
Tags: Autentykacja, Autoryzacja, FOSUserBundle, google API, OAuth 2.0, php, symfony, Symfony 2.1
Uwierzytelnianie! ;-)
I rarely leave a response, but I browsed a few of the responses on this page Autentykacja użytkownika przez Google
OAuth API | xlab. I do have some questions for you
if you do not mind. Is it simply me or do some of
the responses come across like they are coming from brain dead visitors?
:-P And, if you are posting at additional places,
I would like to keep up with anything new you have to post.
Could you list of every one of all your social
pages like your linkedin profile, Facebook page or twitter feed?