$session = new Session(); $myStorage = new DatabaseConnection(DB_HOST, DB_USER, DB_PASS, DB_NAME); // sent by OAuth, you should know that $state = $_GET['state']; // personal state $code = $_GET['code']; // follow the OAuth protocol and get an access token and a refresh token if ($client->authorizationCodeCaught()) { // make the next OAuth call to get those tokens (crendentials) $response = $client->getCredentials(); if ($response->getCode() !== 200) { throw new \Exception(sprintf("An OAuth error occured: %s", $response->getErrorMessage())); } // now merge or create our user if it does not exist ! // $appUser = $myStorage->getUser($session->getUserId()); $mediUser = $client->getUser(); $appUser = $myStorage->getUserByUsername($mediUser->email); // i chose to merge by email/username if ($appUser) { // my user alreay exists ! // I just have to connect him to my app and update his tokens if they are expired $myStorage->updateUserCredentials($appUser->id, array('access_token' => $client->getAccessToken(), 'refresh_token' => $client->getRefreshToken(), 'expires_in' => $client->getTokenLifeDuration())); $session->setUserId($appUser->id); header('Location: index.php'); } else { // user dont exist on my app, lets create it $userId = $myStorage->createUser(array('username' => $mediUser->email, 'password' => 'test', 'access_token' => $client->getAccessToken(), 'refresh_token' => $client->getRefreshToken(), 'expires_in' => $client->getTokenLifeDuration())); $session->setUserId($userId); header('Location: index.php'); } }