Select Git revision
UserInterfaceState.xcuserstate
-
Andrea Bulgarelli authoredAndrea Bulgarelli authored
FacebookLogin.php 2.68 KiB
<?php
namespace RAP;
class FacebookLogin extends LoginHandler {
public function __construct(Locator $locator) {
parent::__construct($locator, Identity::FACEBOOK);
}
public function login(): 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();
$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() . "<br>";
$errorMessage = $errorMessage . "Error Code: " . $helper->getErrorCode() . "<br>";
$errorMessage = $errorMessage . "Error Reason: " . $helper->getErrorReason() . "<br>";
$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"];
});
}
}