我正在使用Facebook的PHP SDK将Facebook登录集成到我的网站。系统正在提示进行Facebook登录。但是,FB会话变量不是一次FB登录成功。
特别是:$_SESSION['fb_token']
未设置
$session = $helper->getSessionFromRedirect(); is NULL
任何想法,如果我遗失了什么?
以下是我正在使用的代码:
session_start();
require_once('includes/facebook/src/Facebook/HttpClients/FacebookHttpable.php');
require_once('includes/facebook/src/Facebook/HttpClients/FacebookCurl.php');
require_once('includes/facebook/src/Facebook/HttpClients/FacebookCurlHttpClient.php');
require_once('includes/facebook/src/Facebook/Entities/AccessToken.php');
require_once('includes/facebook/src/Facebook/Entities/SignedRequest.php');
require_once('includes/facebook/src/Facebook/FacebookSession.php');
require_once('includes/facebook/src/Facebook/FacebookRedirectLoginHelper.php');
require_once('includes/facebook/src/Facebook/FacebookRequest.php');
require_once('includes/facebook/src/Facebook/FacebookResponse.php');
require_once('includes/facebook/src/Facebook/FacebookSDKException.php');
require_once('includes/facebook/src/Facebook/FacebookRequestException.php');
require_once('includes/facebook/src/Facebook/FacebookOtherException.php');
require_once('includes/facebook/src/Facebook/FacebookAuthorizationException.php');
require_once('includes/facebook/src/Facebook/GraphObject.php');
require_once('includes/facebook/src/Facebook/GraphSessionInfo.php');
use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\Entities\AccessToken;
use Facebook\Entities\SignedRequest;
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookOtherException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphSessionInfo;
$app_id = get_config('facebook_app_id');
$app_secret = get_config('facebook_secret_key');
FacebookSession::setDefaultApplication($app_id, $app_secret);
$redirect_url = 'http://mywebsite.com/home.php?msg_ok=Thanks';
$helper = new FacebookRedirectLoginHelper($redirect_url);
// see if a existing session exists
if ( isset( $_SESSION ) && isset( $_SESSION['fb_token'] ) ) {
// create new session from saved access_token
$session = new FacebookSession( $_SESSION['fb_token'] );
// validate the access_token to make sure it's still valid
try {
if ( !$session->validate() ) {
$session = null;
}
} catch ( Exception $e ) {
// catch any exceptions
$session = null;
}
}
if ( !isset( $session ) || $session === null ) {
// no session exists
try
{
$session = $helper->getSessionFromRedirect();
}
catch( FacebookRequestException $ex )
{
// When Facebook returns an error
// handle this better in production code
print_r( $ex );
} catch( Exception $ex ) {
// When validation fails or other local issues
// handle this better in production code
print_r( $ex );
}
}
// see if we have a session
if ( isset( $session ) ) {
// save the session
$_SESSION['fb_token'] = $session->getToken();
// create a session using saved token or the new one we generated at login
$session = new FacebookSession( $session->getToken() );
// graph api request for user data
$request = new FacebookRequest( $session, 'GET', '/me');
$response = $request->execute();
// get response
$graphObject = $response->getGraphObject()->asArray();
var_dump($graphObject);
// print profile data
echo '<pre>'. print_r( $graphObject, 1 ) . '</pre>';
// print logout url using session and redirect_uri (logout.php page should destroy the session)
echo '<a href="'. $helper->getLogoutUrl( $session, $redirect_url ) . '">Logout</a>';
}
else
{
// show login url
//$scope = array('email,publish_stream,user_birthday,user_photos,friends_photos','user_friends');
$scope = array('email','user_friends');
//echo '<a href="'. $helper->getLoginUrl( array( 'email', 'user_friends') ) . '">Login</a>';
echo '<a href="'. $helper->getLoginUrl($scope) . '">Login</a>';
}
答案 0 :(得分:1)
刚才写了简单的facebook api片段,它将帮助你理解Facebook API。
首先尝试以下代码,然后了解代码,内联注释将对您有所帮助。在运行代码之前,请确保使用composer
下载SDK并添加Facebook Application
详细信息。
以下是代码:
// Starting the session
session_start();
// Including composer autoload file..make sure to alter directory address according to you
include_once "vendor/autoload.php";
// Facebook App Configs
define("FB_APP_ID", "YOUR_FB_APP_ID_HERE");
define("FB_APP_SECRET", "YOUR_FB_APP_SECRET_HERE");
define("FB_APP_REDIRECT", "YOUR_FB_REDIRECT_URL_HERE");
// Setting details default app & redirect URL
Facebook\FacebookSession::setDefaultApplication(FB_APP_ID, FB_APP_SECRET);
$fb = new Facebook\FacebookRedirectLoginHelper(FB_APP_REDIRECT);
// Trying to get user token
try {
if($session = $fb->getSessionFromRedirect()) {
$_SESSION["fb_token"] = $session->getToken();
header("Location: index.php");
exit(0);
}
} catch(Facebook\FacebookRequestException $e) {
die($e->getMessage());
} catch(\Exception $e) {
die($e->getMessage());
}
// Using token which is stored in local Session.
if(isset($_SESSION['fb_token'])) {
// Getting user session with Token
$uSession = new Facebook\FacebookSession($_SESSION['fb_token']);
// Making a graph API request
$user = (new Facebook\FacebookRequest(
$uSession, 'GET', '/me'
))->execute()
->getGraphObject(Facebook\GraphUser::className())->asArray();
// print_r($user);
echo <<<userProfile
<table>
<tbody>
userProfile;
foreach($user as $key => $value) {
echo <<<userProfile
<tr>
<td>{$key}</td>
<td>{$value}</td>
</tr>
userProfile;
}
echo <<<userProfile
</tbody>
</table>
<a href="?logout">Logout</a>
<hr />
userProfile;
}
// Settings scope/permissions
$login_url = $fb->getLoginUrl(array(
'scope' => 'user_birthday,user_about_me,user_website,read_stream,publish_stream,publish_actions,manage_pages,email,user_checkins',
));
// Login link
if(!isset($_SESSION["fb_token"])) {
echo '<a href="' . $login_url . '">Login with Facebook</a>';
}
// Logout code block
if(isset($_SESSION["fb_token"], $_GET['logout'])) {
unset($_SESSION['fb_token']);
header("Location: index.php");
exit(0);
}
另外,为了参考,您可以查看文档:{{3}}
您还可以查看使用Facebook API的视频教程:here