使用Facebook SDK for PHP登录Facebook
我在使用Facebook登录我的网站时遇到问题 我已经按照developers.Facebook.com上的教程使用Facebook SDK创建了登录,但它不适合我 我写了一个简单的测试页面来找出哪里出了问题。代码如下:使用Facebook SDK for PHP登录Facebook,php,facebook-graph-api,facebook-php-sdk,facebook-login,facebook-access-token,Php,Facebook Graph Api,Facebook Php Sdk,Facebook Login,Facebook Access Token,我在使用Facebook登录我的网站时遇到问题 我已经按照developers.Facebook.com上的教程使用Facebook SDK创建了登录,但它不适合我 我写了一个简单的测试页面来找出哪里出了问题。代码如下: <!DOCTYPE html> <html> <head></head> <body> <pre> <?php $app_id = '446458238729594'; $app_s
<!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 (
'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.php”…完成。
正在启动会话…完成。
====>>>>会话阵列:
排列(
“计数器”=>0,
“fb_446458238729594_state”=>“84260edcd60940884d261812496a488c”,
)
正在尝试从会话获取计数器。。。
数值:0
增加到一。。。
完成。
价值:1
正在创建Facebook类的实例…完成。
Facebook类的实例:
Facebook::\设置\状态(数组)(
'sharedSessionID'=>NULL,
“appId”=>“446458238729594”,
'appSecret'=>'>>>AppU SECRET',
“args'=>
排列(
0 => 'https://graph.facebook.com/me',
1 =>
排列(
'方法'=>'获取',
“访问令牌”=>“446458238729594 |>>>应用程序密钥”,
“args'=>
排列(
0 => 'https://graph.facebook.com/me',
1 =>
排列(
'方法'=>'获取',
),
),
),
2 =>
排列(
'函数'=>''图',
'class'=>'BaseFacebook',
'类型'=>'->',
“args'=>
排列(
0=>“/me”,
),
),
3 =>
排列(
'文件'=>'/srv/www/htdocs/mysite/web/src/base_facebook.php',
“行”=>644,
'函数'=>'调用用户函数数组',
“args'=>
排列(
0 =>
排列(
0 =>
Facebook::\设置\状态(数组)(
'sharedSessionID'=>NULL,
“appId”=>“446458238729594”,
'appSecret'=>'>>>应用程序密钥>>应用程序密钥',
“args'=>
排列(
0=>“/me”,
),
),
),
'previous'=>NULL,
))
--------
用户ID现在为空。
====>>>>会话阵列:
排列(
“计数器”=>1,
)
用户似乎未登录。正在获取登录url…完成。
网址:
登录/注销
====>>>>会话阵列:
排列(
“计数器”=>1,
“fb_446458238729594_state”=>“6ae5ea9e5f7199fb6d19793905dcdd65”,
)
用户似乎仍未登录。目前我们无法执行任何操作。请尝试使用上面的URL登录。
========
会话阵列:
排列(
“计数器”=>1,
“fb_446458238729594_state”=>“6ae5ea9e5f7199fb6d19793905dcdd65”,
)
请帮我弄清楚,为什么登录不起作用?为什么Facebook类的实例没有检索到访问令牌?为什么Facebook::getUser()方法总是返回0?我如何修复它?在这里尝试一下-请耐心等待: 可能原因1: 您的FB代码看起来不错-但您的错误状态为: “无法连接到2a03:2880:2050:1f01:face:b00c:0:2:无法访问网络”,这表明存在卷曲问题 您能否确认您的cURL已安装/正在您的Web服务器上工作?一个简单的phpinfo()将告诉您 可能原因2: 检查应用程序URL是否设置为运行测试的位置。重定向URI为“http://mysite.localhost/“-因此,请确保在您的应用程序设置页面中,它对应 最后, 只需从基础开始,然后开始添加所有额外的代码。这对我很有用:
如果cURL不可用,PHP SDK将在初始化时死亡。在我看来,这更像是他的服务器上的一般IPv6连接问题;或者是防火墙或其他不允许连接到FB服务器的东西。谢谢。问题出在防火墙中-它阻止了来自本地网络的外部IPv6连接。我点击了f5并点击了几秒钟后,我又得到一个错误:S
http://mysite.localhost/?state=84260edcd60940884d261812496a488c&code=AQDkHPlXXweEiTjXg-sUXwwQAy0_xRYc89Opfz6AF9dlGOomCSG7fjf0440ctHuADKMEG4P7CheeNx9PnwUta-jkfpm03MjDCKyieOZpIPG-evlKYm64mRxD2Q5f_-HJROIC9I_-lHswr5RT3huSQySA55pD28b07Ouv87NqihZ1brGfU-_0LyhcdldtNikb-2xn6NRpa17xEmU37pBqDV1r#_=_
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',
)
<?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 } ?>'