Login with Facebook using Facebook SDK for PHP

facebook-access-token, facebook-graph-api, facebook-login, facebook-php-sdk, php

Solution

Going to take a stab here - so patience please:

Possible cause 1: Your FB code looks good - but your error states:

"Failed to connect to 2a03:2880:2050:1f01:face:b00c:0:2: Network is unreachable" which points to a cURL issue.

Can you confirm your cURL is installed/working on your webserver? A simple phpinfo(); will tell you.

Possible Cause 2: Check that your app URL is set to the location you are running the tests from. Your redirect URI is "http://mysite.localhost/" - so make sure in your app setup page that it corresponds.

Lastly,

simply start with the basics, and then start adding all your extra code in. This works for me:

<?php

require 'src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'xxxxxxxxxxxxxxxxxxx',
  'secret' => 'xxxxxxxxxxxxxxxxxxx',
));

// See if there is a user from a cookie
$user = $facebook->getUser();

if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
$logoutUrl = $facebook->getLogoutUrl();
  } catch (FacebookApiException $e) {
    echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>';
    $user = null;
$loginUrl = $facebook->getLoginUrl($params);
  }
}

?>

<?php if ($user) { ?>
    Your user profile is
    <?php print htmlspecialchars(print_r($user_profile, true)) ?>
    <a href="<?php echo $logoutUrl; ?>">Logout</a>
<?php } else { ?>
    <a href="<?php echo $loginUrl; ?>">Login with Facebook</a>
<?php } ?>'

Problem

I have problems with making login to my site with Facebook. I have created login using Facebook SDK by following the tutorial at developers.facebook.com , but it does not work for me. I have wrote a simple test page to find out, what goes wrong. This is the code: ``` <!DOCTYPE html> <html> <head></head> <body> <pre> <?php $app_id = '446458238729594'; $app_secret = '********'; $redirect_uri = 'http://mysite.localhost/'; try { echo( 'Including "facebook.php"...' ); require './src/facebook.php'; echo( "done.\n\n" ); echo( 'Starting session...' ); $result = session_start(); if( $result ) { echo( "done.\n\n" ); echo( "\n=====>>>>> Session array:\n" . var_export( $_SESSION, true ) . "\n\n" ); } else { echo( "fail.\n\n" ); echo( "\n=====>>>>> Session array:\n" . var_export( $_SESSION, true ) . "\n\n" ); } echo( "Trying to get counter from the session...\n"); if( isset( $_SESSION['counter'] ) ) { echo( 'Value: ' . $_SESSION['counter'] . "\n" ); echo( "Increasing to one...\n"); $_SESSION['counter']++; echo( "done.\n" ); echo( 'Value: ' . $_SESSION['counter'] . "\n\n" ); } else { echo( "fail.\n" ); echo( "Trying to add a counter and set it's value to 0...\n"); $_SESSION['counter'] = 0; echo( 'Value: ' . $_SESSION['counter'] . "\n" ); echo( "done.\n\n" ); } echo( 'Creating an instance of Facebook class...' ); $facebook = new Facebook( array( 'appId' => $app_id, 'secret' => $app_secret, ) ); echo( "done.\n\n" ); echo( "The instance of Facebook class:\n" . str_replace( $app_secret, '>>>APP_SECRET<<<', var_export( $facebook, true ) ) . "\n\n" ); echo( "\n=====>>>>> Session array:\n" . var_export( $_SESSION, true ) . "\n\n" ); echo( 'Trying to get user ID...' ); $user_id = $facebook->getUser(); echo( "done.\n\n" ); echo( "User ID:\n" . var_export( $user_id, true ) . "\n\n" ); echo( "\n=====>>>>> Session array:\n" . var_export( $_SESSION, true ) . "\n\n" ); echo( 'Trying to get user profile info...' ); try { $user_profile = $facebook->api( '/me' ); echo( "done.\n\n" ); echo( "User profile info:\n" . var_export( $user_profile, true ) . "\n\n" ); } catch( Exception $exception ) { echo( "fail. Probably user is not logged in.\n\n" ); echo( "Exception:\n--------\n" . str_replace( $app_secret, '>>>APP_SECRET<<<', var_export( $exception, true ) ) . "\n--------\n\n" ); $user_id = null; echo( "User ID is now NULL.\n\n" ); } echo( "\n=====>>>>> Session array:\n" . var_export( $_SESSION, true ) . "\n\n" ); if( $user ) { echo( 'Seems like user is logged in. Getting logout url...' ); $url = $facebook->getLogoutUrl(); echo( "done.\n\n" ); } else { echo( 'Seems like user is NOT logged in. Getting login url...' ); $url = $facebook->getLoginUrl( array( 'scope' => 'read_stream, publish_stream, user_birthday,' . ' user_location, user_work_history, user_hometown,' . ' user_photos', 'redirect_uri' => $redirect_uri, ) ); echo( "done.\n\n" ); } echo( 'URL:<br></pre><a href=' . $url .">Login / Logout</a><pre>\n\n" ); echo( "\n=====>>>>> Session array:\n" . var_export( $_SESSION, true ) . "\n\n" ); if( $user ) { echo( 'Seems like user is still logged in. Trying to get some profile' . ' info...' ); echo( "\nCreating request...\n" ); $queries = array( array( 'method' => 'GET', 'relative_url' => '/' . $user, ), array( 'method' => 'GET', 'relative_url' => '/' . $user . '/home?limit=50', ), array( 'method' => 'GET', 'relative_url' => '/' . $user . '/friends', ), array( 'method' => 'GET', 'relative_url' => '/' . $user . '/photos?limit=6', ), ); echo( "Request:\n\n" . var_export( $queries, true ) . "\n\n" ); echo( "\nEncoding request using JSON format...\n" ); $queries_encoded = json_encode( $queries ); echo( "Encoded request:\n\n" . var_export( $queries_encoded, true ) . "\n\n" ); try { echo( "\nTrying to get response...\n" ); $response = $facebook->api( '?batch=' . $queries_encoded, 'POST' ); echo( "Response:\n\n" . var_export( $response, true ) . "\n\n" ); echo( "\nTrying to decode response...\n" ); echo( "\n" . json_decode( $response[0]['body'], true ) . "\n" ); echo( "\n" . json_decode( $response[1]['body'], true ) . "\n" ); echo( "\n" . json_decode( $response[2]['body'], true ) . "\n" ); echo( "\n" . json_decode( $response[3]['body'], true ) . "\n" ); echo( "\n\ndone.\n\n" ); } catch( Exception $exception ) { echo( "fail.\n\n" ); echo( "Exception:\n--------\n\n" . str_replace( $app_secret, '>>>APP_SECRET<<<', var_export( $exception, true ) ) . "\n--------\n\n" ); } } else { echo( 'Seems like user is still NOT logged in. At now we can\'t do' . ' anything. Try to login using the URL above.' ); } echo( "\n\n========\n\nSession array:\n" . var_export( $_SESSION, true ) . "\n\n" ); } catch( Exception $exception ) { echo( "\n\n\nAn exception have been trown:\n--------\n\n" . str_replace( $app_secret, '>>>APP_SECRET<<<', var_export( $exception, true ) ) . "\n--------\n\n" ); echo( "\n\n========\n\nSession array:\n" . var_export( $_SESSION, true ) . "\n\n" ); } ?> </pre> </body> </html> ``` After the first visit of this page (I am not logged in at Facebook), I get this output: ``` Including "facebook.php"...done. Starting session...done. =====>>>>> Session array: array ( ) Trying to get counter from the session... fail. Trying to add a counter and set it's value to 0... Value: 0 done. Creating an instance of Facebook class...done. The instance of Facebook class: Facebook::__set_state(array( 'sharedSessionID' => NULL, 'appId' => '446458238729594', 'appSecret' => '>>>APP_SECRET<<<', 'user' => NULL, 'signedRequest' => NULL, 'state' => NULL, 'accessToken' => NULL, 'fileUploadSupport' => false, 'trustForwarded' => false, )) =====>>>>> Session array: array ( 'counter' => 0, ) Trying to get user ID...done. User ID: 0 =====>>>>> Session array: array ( 'counter' => 0, ) Trying to get user profile info...fail. Probably user is not logged in. Exception: -------- FacebookApiException::__set_state(array( 'result' => array ( 'error_code' => 7, 'error' => array ( 'message' => 'Failed to connect to 2a03:2880:2050:1f01:face:b00c:0:2: Network is unreachable', 'type' => 'CurlException', ), ), 'message' => 'Failed to connect to 2a03:2880:2050:1f01:face:b00c:0:2: Network is unreachable', 'string' => '', 'code' => 7, 'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php', 'line' => 967, 'trace' => array ( 0 => array ( 'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php', 'line' => 899, 'function' => 'makeRequest', 'class' => 'BaseFacebook', 'type' => '->', 'args' => array ( 0 => 'https://graph.facebook.com/me', 1 => array ( 'method' => 'GET', 'access_token' => '446458238729594|>>>APP_SECRET<<<', ), ), ), 1 => array ( 'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php', 'line' => 866, 'function' => '_oauthRequest', 'class' => 'BaseFacebook', 'type' => '->', 'args' => array ( 0 => 'https://graph.facebook.com/me', 1 => array ( 'method' => 'GET', ), ), ), 2 => array ( 'function' => '_graph', 'class' => 'BaseFacebook', 'type' => '->', 'args' => array ( 0 => '/me', ), ), 3 => array ( 'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php', 'line' => 644, 'function' => 'call_user_func_array', 'args' => array ( 0 => array ( 0 => Facebook::__set_state(array( 'sharedSessionID' => NULL, 'appId' => '446458238729594', 'appSecret' => '>>>APP_SECRET<<<', 'user' => 0, 'signedRequest' => NULL, 'state' => NULL, 'accessToken' => '446458238729594|>>>APP_SECRET<<<', 'fileUploadSupport' => false, 'trustForwarded' => false, )), 1 => '_graph', ), 1 => array ( 0 => '/me', ), ), ), 4 => array ( 'file' => '/srv/www/htdocs/mysite/web/index.php', 'line' => 69, 'function' => 'api', 'class' => 'BaseFacebook', 'type' => '->', 'args' => array ( 0 => '/me', ), ), ), 'previous' => NULL, )) -------- User ID is now NULL. =====>>>>> Session array: array ( 'counter' => 0, ) Seems like user is NOT logged in. Getting login url...done. URL: Login / Logout =====>>>>> Session array: array ( 'counter' => 0, 'fb_446458238729594_state' => '84260edcd60940884d261812496a488c', ) Seems like user is still NOT logged in. At now we can't do anything. Try to login using the URL above. ======== Session array: array ( 'counter' => 0, 'fb_446458238729594_state' => '84260edcd60940884d261812496a488c', ) ``` Then I try to login using the given URL. It leads me to my Facebook app authorization page. After confirming the requested permissions, it redirects me to this URL: ``` http://mysite.localhost/?state=84260edcd60940884d261812496a488c&code=AQDkHPlXXweEiTjXg-sUXwwQAy0_xRYc89Opfz6AF9dlGOomCSG7fjf0440ctHuADKMEG4P7CheeNx9PnwUta-jkfpm03MjDCKyieOZpIPG-evlKYm64mRxD2Q5f_-HJROIC9I_-lHswr5RT3huSQySA55pD28b07Ouv87NqihZ1brGfU-_0LyhcdldtNikb-2xn6NRpa17xEmU37pBqDV1r#_=_ ``` After that I expect that I am logged in and my page retrieves and shows me some info from my Facebook profile, but it doesn't. I get this output: ``` Including "facebook.php"...done. Starting session...done. =====>>>>> Session array: array ( 'counter' => 0, 'fb_446458238729594_state' => '84260edcd60940884d261812496a488c', ) Trying to get counter from the session... Value: 0 Increasing to one... done. Value: 1 Creating an instance of Facebook class...done. The instance of Facebook class: Facebook::__set_state(array( 'sharedSessionID' => NULL, 'appId' => '446458238729594', 'appSecret' => '>>>APP_SECRET<<<', 'user' => NULL, 'signedRequest' => NULL, 'state' => '84260edcd60940884d261812496a488c', 'accessToken' => NULL, 'fileUploadSupport' => false, 'trustForwarded' => false, )) =====>>>>> Session array: array ( 'counter' => 1, 'fb_446458238729594_state' => '84260edcd60940884d261812496a488c', ) Trying to get user ID...done. User ID: 0 =====>>>>> Session array: array ( 'counter' => 1, ) Trying to get user profile info...fail. Probably user is not logged in. Exception: -------- FacebookApiException::__set_state(array( 'result' => array ( 'error_code' => 7, 'error' => array ( 'message' => 'Failed to connect to 2a03:2880:2050:1f01:face:b00c:0:2: Network is unreachable', 'type' => 'CurlException', ), ), 'message' => 'Failed to connect to 2a03:2880:2050:1f01:face:b00c:0:2: Network is unreachable', 'string' => '', 'code' => 7, 'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php', 'line' => 967, 'trace' => array ( 0 => array ( 'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php', 'line' => 899, 'function' => 'makeRequest', 'class' => 'BaseFacebook', 'type' => '->', 'args' => array ( 0 => 'https://graph.facebook.com/me', 1 => array ( 'method' => 'GET', 'access_token' => '446458238729594|>>>APP_SECRET<<<', ), ), ), 1 => array ( 'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php', 'line' => 866, 'function' => '_oauthRequest', 'class' => 'BaseFacebook', 'type' => '->', 'args' => array ( 0 => 'https://graph.facebook.com/me', 1 => array ( 'method' => 'GET', ), ), ), 2 => array ( 'function' => '_graph', 'class' => 'BaseFacebook', 'type' => '->', 'args' => array ( 0 => '/me', ), ), 3 => array ( 'file' => '/srv/www/htdocs/mysite/web/src/base_facebook.php', 'line' => 644, 'function' => 'call_user_func_array', 'args' => array ( 0 => array ( 0 => Facebook::__set_state(array( 'sharedSessionID' => NULL, 'appId' => '446458238729594', 'appSecret' => '>>>APP_SECRET<<<', 'user' => 0, 'signedRequest' => NULL, 'state' => NULL, 'accessToken' => '446458238729594|>>>APP_SECRET<<<', 'fileUploadSupport' => false, 'trustForwarded' => false, )), 1 => '_graph', ), 1 => array ( 0 => '/me', ), ), ), 4 => array ( 'file' => '/srv/www/htdocs/mysite/web/index.php', 'line' => 69, 'function' => 'api', 'class' => 'BaseFacebook', 'type' => '->', 'args' => array ( 0 => '/me', ), ), ), 'previous' => NULL, )) -------- User ID is now NULL. =====>>>>> Session array: array ( 'counter' => 1, ) Seems like user is NOT logged in. Getting login url...done. URL: Login / Logout =====>>>>> Session array: array ( 'counter' => 1, 'fb_446458238729594_state' => '6ae5ea9e5f7199fb6d19793905dcdd65', ) Seems like user is still NOT logged in. At now we can't do anything. Try to login using the URL above. ======== Session array: array ( 'counter' => 1, 'fb_446458238729594_state' => '6ae5ea9e5f7199fb6d19793905dcdd65', ) ``` Please, help me figure out, why login does not work? Why the instance of Facebook class does not retrieve the access token? And why the method Facebook::getUser() always returns 0? How can I fix it?

Original source