locator->config->authenticationMethods->Facebook; $fb = new \Facebook\Facebook([ 'app_id' => $Facebook->id, 'app_secret' => $Facebook->secret, 'default_graph_version' => $Facebook->version, ]); $helper = $fb->getRedirectLoginHelper(); $permissions = ['email']; // Optional permissions: we need user email $loginUrl = $helper->getLoginUrl($this->locator->getBasePath() . $Facebook->callback, $permissions); return $loginUrl; } public function retrieveToken(): string { // Retrieve Facebook configuration $Facebook = $this->locator->config->authenticationMethods->Facebook; $fb = new \Facebook\Facebook([ 'app_id' => $Facebook->id, 'app_secret' => $Facebook->secret, 'default_graph_version' => $Facebook->version, ]); $helper = $fb->getRedirectLoginHelper(); if (isset($_GET['state'])) { $helper->getPersistentDataHandler()->set('state', $_GET['state']); } // obtaining current URL without query string $accessToken = $helper->getAccessToken($this->locator->getBasePath() . $Facebook->callback); if (!isset($accessToken)) { if ($helper->getError()) { $errorMessage = "Error: " . $helper->getError() . "
"; $errorMessage = $errorMessage . "Error Code: " . $helper->getErrorCode() . "
"; $errorMessage = $errorMessage . "Error Reason: " . $helper->getErrorReason() . "
"; $errorMessage = $errorMessage . "Error Description: " . $helper->getErrorDescription(); throw new ServerErrorException($errorMessage); } else { throw new BadRequestException("Unable to obtain access token"); } } // Returns a `Facebook\FacebookResponse` object $response = $fb->get('/me?fields=id,first_name,last_name,email', $accessToken); $_SESSION['fb_access_token'] = (string) $accessToken; $fbUser = $response->getGraphUser(); $typedId = $fbUser["id"]; return $this->onIdentityDataReceived($typedId, function($identity) use($fbUser) { $identity->email = $fbUser["email"]; $identity->name = $fbUser["first_name"]; $identity->surname = $fbUser["last_name"]; }); } }