public function authorize() { try { $this->accessToken = $this->helper->getAccessToken(); } catch (FacebookResponseException $e) { // When Graph returns an error throw new FacebookAuthenticationException('Graph returned an error: ' . $e->getMessage()); } catch (FacebookSDKException $e) { // When validation fails or other local issues throw new FacebookAuthenticationException('Facebook SDK returned an error: ' . $e->getMessage()); } if (!$this->accessToken) { throw new FacebookAuthenticationException('Access token not received. ' . $this->helper->getError(), $this->helper->getErrorCode()); } try { // Returns a `Facebook\FacebookResponse` object $response = $this->facebook->get('/me?fields=id,name', $this->accessToken); } catch (FacebookResponseException $e) { throw new FacebookAuthenticationException('Graph returned an error: ' . $e->getMessage()); } catch (FacebookSDKException $e) { throw new FacebookAuthenticationException('Facebook SDK returned an error: ' . $e->getMessage()); } $fbUser = $response->getGraphUser(); if (!($user = $this->doctrine->getRepository('QuizBundle:User')->findOneBySocialId($fbUser['id']))) { $user = (new Entity\User())->setAccessToken($this->accessToken)->setSocialType(Entity\User::FACEBOOK)->setSocialId($fbUser['id'])->setName($fbUser['name']); $manager = $this->doctrine->getManager(); $manager->persist($user); $manager->flush(); } $token = new SocialToken($user, $this->accessToken, 'facebook', [$this->adminId == $fbUser['id'] ? 'ROLE_ADMIN' : 'ROLE_USER']); $this->tokenStorage->setToken($token); }
public function redirect() { $facebookClient = new FacebookClient(); $helper = new FacebookRedirectLoginHelper($this->facebookApp); $permissions = ['email', 'user_likes']; // optional $loginUrl = $helper->getLoginUrl('http://www.schoolmanager.or.ke/login', $permissions); header('Location: ' . $loginUrl); //echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>'; }
/** * @dataProvider provideUris */ public function testGetFilterdUriRemoveFacebookQueryParams($uri, $expected) { $helper = new FacebookRedirectLoginHelper(FacebookTestCredentials::$appId, FacebookTestCredentials::$appSecret); $helper->disableSessionStatusCheck(); $class = new \ReflectionClass('Facebook\\Helpers\\FacebookRedirectLoginHelper'); $method = $class->getMethod('getFilteredUri'); $method->setAccessible(true); $currentUri = $method->invoke($helper, $uri); $this->assertEquals($expected, $currentUri); }
public function testAnAccessTokenCanBeObtainedFromRedirect() { $this->persistentDataHandler->set('state', 'foo_state'); $_GET['state'] = 'foo_state'; $_GET['code'] = 'foo_code'; $response = m::mock('Facebook\\Entities\\FacebookResponse'); $response->shouldReceive('getDecodedBody')->once()->andReturn(['access_token' => 'access_token_from_code', 'expires' => 555]); $client = m::mock('Facebook\\FacebookClient'); $client->shouldReceive('sendRequest')->with(m::type('Facebook\\Entities\\FacebookRequest'))->once()->andReturn($response); $app = new FacebookApp('123', 'foo_app_secret'); $helper = new FacebookRedirectLoginHelper($app, $this->persistentDataHandler); $accessToken = $helper->getAccessToken($client, self::REDIRECT_URL); $this->assertInstanceOf('Facebook\\Entities\\AccessToken', $accessToken); $this->assertEquals('access_token_from_code', (string) $accessToken); }
private function getAccessToken($time = 'short') { switch ($time) { case 'short': $accessToken = $this->helper->getAccessToken(); break; case 'long': $accessToken = $this->getClient()->getLongLivedAccessToken($this->helper->getAccessToken()); break; default: $accessToken = null; break; } return $accessToken; }
public function fblogin() { $this->autoRender = false; if (session_status() == PHP_SESSION_NONE) { session_start(); } FacebookSession::setDefaultApplication('491776471001011', '2383aae6c102275bafd2ff7f118d988f'); $helper = new FacebookRedirectLoginHelper('http://localhost/cakephp3/users/fb_login'); $url = $helper->getLoginUrl('http://localhost/cakephp3/users/fb_login', array('email')); $this->redirect($url); }
public function getLoginSession($redirectUrl) { $helper = new FacebookRedirectLoginHelper($redirectUrl); $this->setSession($helper->getSessionFromRedirect()); return $this->getSession(); }