/** * @param Request $request * @param array $routeParams * @return \Psr\Http\Message\ResponseInterface|RedirectResponse */ public function handle(Request $request, array $routeParams = []) { session_start(); $provider = new Facebook(['clientId' => $this->settings->get('flarum-auth-facebook.app_id'), 'clientSecret' => $this->settings->get('flarum-auth-facebook.app_secret'), 'redirectUri' => $this->url->toRoute('auth.facebook'), 'graphApiVersion' => 'v2.4']); if (!isset($_GET['code'])) { $authUrl = $provider->getAuthorizationUrl(['scope' => ['email']]); $_SESSION['oauth2state'] = $provider->getState(); return new RedirectResponse($authUrl); } elseif (empty($_GET['state']) || $_GET['state'] !== $_SESSION['oauth2state']) { unset($_SESSION['oauth2state']); echo 'Invalid state.'; exit; } $token = $provider->getAccessToken('authorization_code', ['code' => $_GET['code']]); $owner = $provider->getResourceOwner($token); $email = $owner->getEmail(); $username = preg_replace('/[^a-z0-9-_]/i', '', $owner->getName()); return $this->authenticate(compact('email'), compact('username')); }
/** * Generates tokens for facebook social login * @param Request $request * @return static */ public function authenticateFacebook(Request $request) { # Get access token from request #$accessToken = new AccessToken(array('access_token' => $request->input('access_token'))); $accessToken = new AccessToken(array('access_token' => 'CAAFNoAIv7IMBAA7nXuT2WCoLrHN7Sfi96SizcjlIweZBjQZAA2Rzwj6es97hbZBfON4dIlmarqaIFZAZBMyCOe06wi13i19GlaZCFZCgVjPIk7aYaYa0CC1XVnN3jeAG3oJzur9x9ld2oMLT26VsR6ZBvkuaIaPt0uMQspZBgc6ZAvZCTZCPqsDQEwn4cmvo0IRwwZA5AWIeCENZCpUgZDZD')); # Create a new provider which takes values from config file $provider = new Facebook(['clientId' => config('easyauth.facebook.clientId'), 'clientSecret' => config('easyauth.facebook.clientSecret'), 'redirectUri' => config('easyauth.facebook.redirectUri'), 'graphApiVersion' => config('easyauth.facebook.graphApiVersion')]); try { # We got an access token, let's now get the owner details $ownerDetails = $provider->getResourceOwner($accessToken); $profile = array('provider_key' => $ownerDetails->getId(), 'first_name' => $ownerDetails->getFirstName(), 'last_name' => $ownerDetails->getLastName(), 'email' => $ownerDetails->getEmail(), 'avatar' => $ownerDetails->getPictureUrl(), 'provider' => 'Facebook'); # Use these details to create a new profile or return a token in case the user exists return $this->authenticateOrCreateUser($profile); } catch (Exception $e) { # Failed to get user details exit('Something went wrong: ' . $e->getMessage()); } }