6

Tôi gặp sự cố khi đăng nhập vào trang web của mình bằng Facebook.Đăng nhập bằng Facebook bằng Facebook SDK cho PHP

Tôi đã tạo đăng nhập bằng Facebook SDK bằng cách làm theo hướng dẫn tại developers.facebook.com, nhưng nó không hoạt động đối với tôi.

Tôi đã viết một trang thử nghiệm đơn giản để tìm hiểu xem có gì sai. Đây là mã:

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

Sau chuyến thăm đầu tiên của trang này (tôi không đăng nhập vào Facebook), tôi nhận được kết quả này:

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

Sau đó, tôi cố gắng đăng nhập bằng cách sử dụng URL được . Nó dẫn tôi đến trang ủy quyền ứng dụng Facebook của tôi. Sau khi xác nhận các điều khoản yêu cầu, nó chuyển hướng tôi đến URL này:

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

Sau đó tôi hy vọng rằng tôi đang đăng nhập và trang của tôi lấy và chỉ cho tôi một số thông tin từ hồ sơ Facebook của tôi, nhưng nó không. Tôi nhận được kết quả này:

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

Xin vui lòng, giúp tôi tìm hiểu, tại sao đăng nhập không hoạt động? Tại sao cá thể của lớp Facebook không truy xuất mã thông báo truy cập? Và tại sao phương thức Facebook :: getUser() luôn trả về 0? Làm thế nào tôi có thể sửa chữa nó?

Trả lời

4

Đi mất một đâm ở đây - vì vậy sự kiên nhẫn xin vui lòng:

Nguyên nhân có thể 1: đang FB của bạn có vẻ tốt - nhưng lỗi của bạn trạng thái:

"Không thể kết nối với 2a03: 2880: 2050: 1f01: khuôn mặt: b00c: 0: 2: Mạng không thể truy cập được "trỏ đến vấn đề cURL.

Bạn có thể xác nhận cURL của mình được cài đặt/làm việc trên máy chủ web của bạn không? Một phpinfo đơn giản(); sẽ nói với bạn.

Nguyên nhân có thể 2: Kiểm tra xem URL ứng dụng của bạn có được đặt thành vị trí bạn đang chạy thử nghiệm không. URI chuyển hướng của bạn là "http: //mysite.localhost/" - vì vậy hãy đảm bảo trong trang thiết lập ứng dụng của bạn tương ứng.

Cuối cùng,

chỉ cần bắt đầu với những điều cơ bản, và sau đó bắt đầu thêm tất cả các mã thêm của bạn trong này làm việc cho tôi:.

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

Nếu cURL là không có sẵn, PHP SDK sẽ chết trên đã khởi tạo. Đối với tôi nó trông giống như một vấn đề kết nối IPv6 chung trên máy chủ của anh ấy; hoặc tường lửa hoặc thứ gì đó không cho phép kết nối với máy chủ của FB. – CBroe

+0

Cảm ơn bạn. Vấn đề nằm trong tường lửa - nó chặn các kết nối IPv6 bên ngoài từ mạng cục bộ của tôi. – user1764823

+0

tuyệt vời @CBroe - bắt thú vị. – Fraccus

Các vấn đề liên quan