6

Ho problemi con l'accesso al mio sito con Facebook.Accedi con Facebook utilizzando Facebook SDK per PHP

Ho creato il login utilizzando Facebook SDK seguendo il tutorial su developers.facebook.com, ma non funziona per me.

Ho scritto una semplice pagina di test per scoprire cosa va storto. Questo è il codice:

<!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> 

Dopo la prima visita di questa pagina (non sto collegato a Facebook), ottengo questo 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', 
) 

Poi cerco di effettuare il login utilizzando l'URL dato . Mi porta alla mia pagina di autorizzazione dell'app Facebook. Dopo aver confermato le autorizzazioni richieste, mi reindirizza a questo URL:

http://mysite.localhost/?state=84260edcd60940884d261812496a488c&code=AQDkHPlXXweEiTjXg-sUXwwQAy0_xRYc89Opfz6AF9dlGOomCSG7fjf0440ctHuADKMEG4P7CheeNx9PnwUta-jkfpm03MjDCKyieOZpIPG-evlKYm64mRxD2Q5f_-HJROIC9I_-lHswr5RT3huSQySA55pD28b07Ouv87NqihZ1brGfU-_0LyhcdldtNikb-2xn6NRpa17xEmU37pBqDV1r#_=_ 

Dopo che mi aspetto che sono entrato e la mia pagina recupera e mi mostra alcune informazioni da mio profilo Facebook, ma non è così. Ottengo questo risultato:

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', 
) 

Per favore, aiutami a capire, perché il login non funziona? Perché l'istanza della classe Facebook non recupera il token di accesso? E perché il metodo Facebook :: getUser() restituisce sempre 0? Come posso ripararlo?

risposta

4

Andare a prendere una pugnalata qui - quindi pazienza per favore:

Possibile causa 1: Il tuo codice FB sembra buono - ma il vostro errore stati:

"Impossibile connettersi al 2A03: 2880: 2050: 1f01: face: b00c: 0: 2: Network irraggiungibile "che indica un problema di cURL.

Puoi confermare che cURL è installato/funzionante sul tuo server web? Un semplice phpinfo(); te lo dirò.

Possibile causa 2: Verificare che l'URL dell'app sia impostato sulla posizione da cui si eseguono i test. Il tuo URI di reindirizzamento è "http: //mysite.localhost/", quindi assicurati che nella pagina di configurazione dell'app corrisponda.

Infine,

semplicemente iniziare con le basi, e poi iniziare ad aggiungere tutto il codice in più in questo funziona per 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 } ?>' 
+3

Se cURL non era disponibile, il PHP SDK sarebbe morto inizializzazione già. Per me sembra più un problema di connettività IPv6 generale sul suo server; o un firewall o qualcosa che non consente la connessione ai server di FB. – CBroe

+0

Grazie. Il problema era nel firewall: bloccava le connessioni IPv6 esterne dalla mia rete locale. – user1764823

+0

awesome @CBroe - bella cattura. – Fraccus

Problemi correlati