0
我使用Facebook的PHP SDK将Facebook登录集成到我的网站。系统正在提示Facebook登录。但是,一旦FB登录成功,FB会话变量就不会成功。PHP SDK:登录API不起作用
特别是:$_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>';
}
感谢阿什温尽管如此,我并没有使用你的确切代码,它的确帮助我理解了API集成。 – Kiran
欢迎您!快乐编码;) –