Uwierzytelnianie użytkownika przez Google OAuth API

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!

[FM_form id="1"]


  • http://maciej.strzelecki.name/ Maciek

    Uwierzytelnianie! ;-)

  • Paweł

    Tak jak pisze Maciek, “uwierzytelnienie”.
    Autoryzacja, uwierzytelnienie, autoryzacja, uwierzytelnienie. Proszę powtarzać za mną… ;)