/** * @param Request $request * @return \Psr\Http\Message\ResponseInterface|RedirectResponse */ public function handle(Request $request) { $redirectUri = (string) $request->getAttribute('originalUri', $request->getUri())->withQuery(''); $server = new Twitter(['identifier' => $this->settings->get('flarum-auth-twitter.api_key'), 'secret' => $this->settings->get('flarum-auth-twitter.api_secret'), 'callback_uri' => $redirectUri]); $session = $request->getAttribute('session'); $queryParams = $request->getQueryParams(); $oAuthToken = array_get($queryParams, 'oauth_token'); $oAuthVerifier = array_get($queryParams, 'oauth_verifier'); if (!$oAuthToken || !$oAuthVerifier) { $temporaryCredentials = $server->getTemporaryCredentials(); $session->set('temporary_credentials', serialize($temporaryCredentials)); $session->save(); // Second part of OAuth 1.0 authentication is to redirect the // resource owner to the login screen on the server. $server->authorize($temporaryCredentials); exit; } // Retrieve the temporary credentials we saved before $temporaryCredentials = unserialize($session->get('temporary_credentials')); // We will now retrieve token credentials from the server $tokenCredentials = $server->getTokenCredentials($temporaryCredentials, $oAuthToken, $oAuthVerifier); $user = $server->getUserDetails($tokenCredentials); $identification = ['twitter_id' => $user->uid]; $suggestions = ['username' => $user->nickname, 'avatarUrl' => str_replace('_normal', '', $user->imageUrl)]; return $this->authResponse->make($request, $identification, $suggestions); }
/** * Do twitter login * * @return mixed|void */ public function twitterLogin() { $this->autoRender = false; $server = new Twitter(['identifier' => Configure::read('OAuth.providers.twitter.options.clientId'), 'secret' => Configure::read('OAuth.providers.twitter.options.clientSecret'), 'callbackUri' => Configure::read('OAuth.providers.twitter.options.redirectUri')]); $oauthToken = $this->request->query('oauth_token'); $oauthVerifier = $this->request->query('oauth_verifier'); if (!empty($oauthToken) && !empty($oauthVerifier)) { $temporaryCredentials = $this->request->session()->read('temporary_credentials'); $tokenCredentials = $server->getTokenCredentials($temporaryCredentials, $oauthToken, $oauthVerifier); $user = (array) $server->getUserDetails($tokenCredentials); $user['token'] = ['accessToken' => $tokenCredentials->getIdentifier(), 'tokenSecret' => $tokenCredentials->getSecret()]; $this->request->session()->write(Configure::read('Users.Key.Session.social'), $user); try { $user = $this->Auth->identify(); $this->_afterIdentifyUser($user, true); } catch (UserNotActiveException $ex) { $exception = $ex; } catch (AccountNotActiveException $ex) { $exception = $ex; } catch (MissingEmailException $ex) { $exception = $ex; } if (!empty($exception)) { return $this->failedSocialLogin($exception, $this->request->session()->read(Configure::read('Users.Key.Session.social')), true); } } else { $temporaryCredentials = $server->getTemporaryCredentials(); $this->request->session()->write('temporary_credentials', $temporaryCredentials); $url = $server->getAuthorizationUrl($temporaryCredentials); return $this->redirect($url); } }
public function buildToken(Request $req, $firewallName) { $providerKey = $req->attributes->get('provider'); // Retrieve the temporary credentials from step 2 $temporaryCredentials = unserialize($this->session->get(self::TEMP_CRED)); // Third and final part to OAuth 1.0 authentication is to retrieve token // credentials (formally known as access tokens in earlier OAuth 1.0 // specs). $tokenCredentials = $this->provider->getTokenCredentials($temporaryCredentials, $req->query->get('oauth_token'), $req->query->get('oauth_verifier')); $this->session->remove(self::TEMP_CRED); // We got an access token, let's now get the user's details /** @var \League\OAuth1\Client\Entity\User */ $userDetails = $this->provider->getUserDetails($tokenCredentials); $internToken = new Token($firewallName, $providerKey, $userDetails->uid, [self::IDENTIFIED]); $internToken->setAttribute('nickname', $userDetails->nickname); $this->logger->debug('twitter', iterator_to_array($userDetails->getIterator())); return $internToken; }
/** * Returns an instance of TwitterOAuthUser. * * @return TwitterOAuthUser */ public function getUserDetails() { $accessToken = $this->getAccessToken(); $tc = new TokenCredentials(); $tc->setIdentifier($accessToken['oauth_token']); $tc->setSecret($accessToken['oauth_token_secret']); $user = $this->instance->getUserDetails($tc); $twUserObj = new TwitterOAuthUser($user->nickname); $twUserObj->setAvatarUrl($user->imageUrl); $twUserObj->setName($user->name); $twUserObj->setLocation($user->location); $twUserObj->setProfileUrl('https://twitter.com/' . $user->screen_name); $twUserObj->setWebsite($user->urls['url']); $twUserObj->setDescription($user->description); $twUserObj->setProfileId($user->uid); return $twUserObj; }
/** * @param Request $request * @param array $routeParams * @return \Psr\Http\Message\ResponseInterface|RedirectResponse */ public function handle(Request $request, array $routeParams = []) { session_start(); $server = new Twitter(array('identifier' => $this->settings->get('flarum-auth-twitter.api_key'), 'secret' => $this->settings->get('flarum-auth-twitter.api_secret'), 'callback_uri' => $this->url->toRoute('auth.twitter'))); if (!isset($_GET['oauth_token']) || !isset($_GET['oauth_verifier'])) { $temporaryCredentials = $server->getTemporaryCredentials(); $_SESSION['temporary_credentials'] = serialize($temporaryCredentials); session_write_close(); // Second part of OAuth 1.0 authentication is to redirect the // resource owner to the login screen on the server. $server->authorize($temporaryCredentials); exit; } // Retrieve the temporary credentials we saved before $temporaryCredentials = unserialize($_SESSION['temporary_credentials']); // We will now retrieve token credentials from the server $tokenCredentials = $server->getTokenCredentials($temporaryCredentials, $_GET['oauth_token'], $_GET['oauth_verifier']); $user = $server->getUserDetails($tokenCredentials); return $this->authenticate(['twitter_id' => $user->uid], ['username' => $user->nickname]); }