6

Facebookで自分のサイトにログインする際に問題があります。Facebook SDK for PHPを使用してFacebookにログイン

developers.facebook.comのチュートリアルに従ってFacebook SDKを使用してログインを作成しましたが、それは私にとっては役に立ちません。

私は簡単なテストページを書いて何がうまくいかないかを調べました。これは、コードです:このページの最初の訪問の後

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

(私はFacebookのにログインしていないです)、私はこの出力を得る:

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

その後、私は与えられたURLを使用してログインしてみてください。私のFacebookアプリ認証ページにつながります。要求されたアクセス権を確認した後、それはこのURLに私をリダイレクトします。その後

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

を私がログインしていますし、私のページを取得し、私に私のFacebookのプロフィールからいくつかの情報を示しているが、そうでないことを期待しています。私はこの出力を得ます:

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

なぜログインがうまくいかないのですか?なぜFacebookクラスのインスタンスがアクセストークンを取得しないのですか?なぜFacebook :: getUser()メソッドは常に0を返しますか?どうすれば修正できますか?ここで刺しを取るつもり

答えて

4

- そう忍耐してください:

考えられる原因1: あなたのFBのコードがよさそうだ - しかし、あなたのエラー状態:2050:2880:

が「2a03への接続に失敗しました: 1f01:face:b00c:0:2:ネットワークに到達できません "というcURLの問題を指しています。

ウェブサーバーにcURLがインストールされているかどうか確認できますか?単純なphpinfo();教えてくれます。

考えられる原因2: アプリケーションURLがテストを実行している場所に設定されていることを確認してください。あなたのリダイレクトURIは "http://mysite.localhost/"です - あなたのアプリケーション設定ページにそれが対応することを確認してください。

最後に、

は、単に基本から始め、その後にすべての余分なコードを追加し始める。これは、私の作品:。

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

カールが利用できなかった場合は、PHP SDKが上死にますすでに初期化されています私にとっては、彼のサーバー上での一般的なIPv6接続の問題のように見えます。 FBのサーバーへの接続を許可しないファイアウォールなどがあります。 – CBroe

+0

ありがとうございます。問題はファイアウォールで発生しました。ローカルネットワークからの外部IPv6接続をブロックしました。 – user1764823

+0

すごい@CBroe - いいキャッチ。 – Fraccus

関連する問題