Created
November 5, 2012 19:08
-
-
Save jessedobbelaere/4019651 to your computer and use it in GitHub Desktop.
Twitter oAuth problem
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Twitter configuration | |
fos_twitter: | |
file: %kernel.root_dir%/../vendor/kertz/twitteroauth/twitteroauth/twitteroauth.php | |
consumer_key: herewasmyconsumerkey | |
consumer_secret: herewasmyconsumersecret | |
callback_url: http://matchtracker.localhost/app_dev.php/login_twitter_check |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
jms_security_extra: | |
secure_all_services: false | |
expressions: true | |
security: | |
encoders: | |
FOS\UserBundle\Model\UserInterface: sha512 | |
role_hierarchy: | |
ROLE_ADMIN: ROLE_USER | |
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] | |
providers: | |
chain_provider: | |
chain: | |
providers: [fos_userbundle, my_fos_twitter_provider] | |
fos_userbundle: | |
id: fos_user.user_provider.username_email | |
my_fos_facebook_provider: | |
id: my.facebook.user | |
my_fos_twitter_provider: | |
id: my.twitter.user | |
firewalls: | |
dev: | |
pattern: ^/(_(profiler|wdt)|css|images|js)/ | |
security: false | |
main: | |
pattern: /.* | |
form_login: | |
check_path: /login_check | |
login_path: /login | |
provider: fos_userbundle | |
logout: | |
path: /logout | |
target: / | |
handlers: ["fos_facebook.logout_handler"] | |
fos_facebook: | |
app_url: "http://apps.facebook.com/matchtracker/" | |
server_url: "http://matchtracker.localhost/" | |
login_path: /login | |
check_path: /login_facebook_check | |
default_target_path: / | |
provider: my_fos_facebook_provider | |
fos_twitter: | |
login_path: /twitter/login | |
check_path: /twitter/login_check | |
default_target_path: / | |
provider: my_fos_twitter_provider | |
security: true | |
anonymous: ~ | |
#http_basic: | |
# realm: "Secured Demo Area" | |
access_control: | |
- { path: /dashboard/.*, role: ROLE_ADMIN } | |
#- { path: /.*, role: IS_AUTHENTICATED_ANONYMOUSLY } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
parameters: | |
# match_tracker_app.example.class: MatchTracker\AppBundle\Example | |
services: | |
my.facebook.user: | |
class: MatchTracker\AppBundle\Security\User\Provider\FacebookProvider | |
arguments: | |
facebook: "@fos_facebook.api" | |
userManager: "@fos_user.user_manager" | |
validator: "@validator" | |
container: "@service_container" | |
my.twitter.user: | |
class: MatchTracker\AppBundle\Security\User\Provider\TwitterProvider | |
arguments: | |
twitter_oauth: "@fos_twitter.api" | |
userManager: "@fos_user.user_manager" | |
validator: "@validator" | |
session: "@session" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
* This file is part of the FOSTwitterBundle package. | |
* | |
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/> | |
* | |
* For the full copyright and license information, please view the LICENSE | |
* file that was distributed with this source code. | |
*/ | |
namespace FOS\TwitterBundle\Services; | |
use Symfony\Component\Routing\RouterInterface; | |
use Symfony\Component\HttpFoundation\Session\Session; | |
use Symfony\Component\HttpFoundation\Request; | |
use Symfony\Component\Security\Core\Exception\AuthenticationException; | |
use TwitterOAuth; | |
class Twitter | |
{ | |
private $twitter; | |
private $session; | |
private $router; | |
private $callbackRoute; | |
private $callbackURL; | |
public function __construct(TwitterOAuth $twitter, Session $session, $callbackURL = null) | |
{ | |
$this->twitter = $twitter; | |
$this->session = $session; | |
$this->callbackURL = $callbackURL; | |
} | |
public function setCallbackRoute(RouterInterface $router, $routeName) | |
{ | |
$this->router = $router; | |
$this->callbackRoute = $routeName; | |
} | |
public function getLoginUrl() | |
{ | |
/* Get temporary credentials. */ | |
$requestToken = ($callbackUrl = $this->getCallbackUrl()) ? | |
$this->twitter->getRequestToken($callbackUrl) | |
: $this->twitter->getRequestToken(); | |
/* Save temporary credentials to session. */ | |
$this->session->set('oauth_token', $requestToken['oauth_token']); | |
$this->session->set('oauth_token_secret', $requestToken['oauth_token_secret']); | |
/* If last connection failed don't display authorization link. */ | |
switch ($this->twitter->http_code) { | |
case 200: | |
/* Build authorize URL and redirect user to Twitter. */ | |
$redirectURL = $this->twitter->getAuthorizeURL($requestToken); | |
return $redirectURL; | |
break; | |
default: | |
/* return null if something went wrong. */ | |
return null; | |
} | |
} | |
public function getAccessToken($oauthToken, $oauthVerifier) | |
{ | |
//set OAuth token in the API | |
$this->twitter->setOAuthToken($oauthToken, $this->session->get('oauth_token_secret')); | |
/* Check if the oauth_token is old */ | |
if ($this->session->has('oauth_token')) { | |
if ($this->session->get('oauth_token') && ($this->session->get('oauth_token') !== $oauthToken)) { | |
$this->session->remove('oauth_token'); | |
return null; | |
} | |
} | |
/* Request access tokens from twitter */ | |
$accessToken = $this->twitter->getAccessToken($oauthVerifier); | |
/* Save the access tokens. Normally these would be saved in a database for future use. */ | |
$this->session->set('access_token', $accessToken['oauth_token']); | |
$this->session->set('access_token_secret', $accessToken['oauth_token_secret']); | |
/* Remove no longer needed request tokens */ | |
!$this->session->has('oauth_token') ?: $this->session->remove('oauth_token', null); | |
!$this->session->has('oauth_token_secret') ?: $this->session->remove('oauth_token_secret', null); | |
/* If HTTP response is 200 continue otherwise send to connect page to retry */ | |
if (200 == $this->twitter->http_code) { | |
/* The user has been verified and the access tokens can be saved for future use */ | |
return $accessToken; | |
} | |
/* Return null for failure */ | |
return null; | |
} | |
private function getCallbackUrl() | |
{ | |
if (!empty($this->callbackURL)) { | |
return $this->callbackURL; | |
} | |
if (!empty($this->callbackRoute)) { | |
return $this->router->generate($this->callbackRoute, array(), true); | |
} | |
return null; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace MatchTracker\AppBundle\Controller; | |
use Symfony\Bundle\FrameworkBundle\Controller\Controller; | |
use Symfony\Component\HttpFoundation\RedirectResponse; | |
class TwitterController extends Controller { | |
public function connectTwitterAction() | |
{ | |
$request = $this->get('request'); | |
$twitter = $this->get('fos_twitter.service'); | |
$authURL = $twitter->getLoginUrl($request); | |
$response = new RedirectResponse($authURL); | |
return $response; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment