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ó?
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
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
tuyệt vời @CBroe - bắt thú vị. – Fraccus