登录后未设置Facebook $会话[SDK 4.0]

时间:2015-03-16 11:58:10

标签: php facebook facebook-php-sdk facebook-login

在Facebook上登录过程后,未设置变量$ session。 这是我的index.php:

<?php
require_once('fbconfig.php'); //my config files, where I've defined $appId and $appSecret
session_start();

define('FACEBOOK_SDK_V4_SRC_DIR', '/home/.../web/www/fb-sdk/src/Facebook/');
require __DIR__ . '/fb-sdk/autoload.php';


use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
use Facebook\FacebookRedirectLoginHelper;

FacebookSession::setDefaultApplication($appId, $appSecret);


$redirect_url = 'http://example.com/login.php';
$helper = new FacebookRedirectLoginHelper($redirect_url);
echo '<a href="' . $helper->getLoginUrl() . '">Login with Facebook</a>';
?>

这是login.php,Facebook在Facebook对话框后重定向我:

<?php
require_once('fbconfig.php');

define('FACEBOOK_SDK_V4_SRC_DIR', '/home/.../web/www/fb-sdk/src/Facebook/');
require __DIR__ . '/fb-sdk/autoload.php';


use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookAuthorizationException;

session_start();

FacebookSession::setDefaultApplication($appId, $appSecret);




$helper = new FacebookRedirectLoginHelper('http://example.com/login.php');
try {
  $session = $helper->getSessionFromRedirect();
} catch(FacebookRequestException $ex) {
  // When Facebook returns an error
} catch(\Exception $ex) {
  // When validation fails or other local issues
}
if ($session) {
echo 'Session active';
}else{
echo 'Session not set'; //and this is the case
}

?>

在login.php中应该设置var $ session,但不是。我已经阅读了有关PHP的FacebookRedirectLoginHelper的文档。 https://developers.facebook.com/docs/php/FacebookJavaScriptLoginHelper/4.0.0

/编辑 我在浏览器地址栏中获得了某种“代码”,但FacebookRedirectLoginHelper似乎没有处理代码。 adressbar

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

好的,最后我解决了问题(感谢Ryan's comment):首先,我将所有代码放入一个文件index.php中。在您执行此操作之前,请勿致电$helper->getLoginUrl,这一点非常重要:$session = $helper->getSessionFromRedirect();。否则var $ session将设置为NULL。这就是我实现代码的方式:

<?php
require_once('fbconfig.php');
session_start();

define('FACEBOOK_SDK_V4_SRC_DIR', '/home/.../fb-sdk/src/Facebook/');
require __DIR__ . '/fb-sdk/autoload.php';


use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
use Facebook\FacebookRedirectLoginHelper;

FacebookSession::setDefaultApplication($appId, $appSecret);


$redirect_url = 'http://example.com/';
$helper = new FacebookRedirectLoginHelper($redirect_url);


$session = $helper->getSessionFromRedirect();

try {
    $session = $helper->getSessionFromRedirect();
}catch(FacebookRequestException $ex){
    // When Facebook returns an error
}catch(\Exception $ex){ 
    // When validation fails or other local issues
}

if ($session) {
    echo 'Logged in';
}else{
    echo "not logged in";

    echo '<a href="' . $helper->getLoginUrl(array( 'email', 'user_friends' )) . '">Login with Facebook</a><br/>';
}
?>

我还强烈建议不要使用运行Facebook-App的子域名。我将App-domain从app.example.com更改为example.com/app,它对我有用,无法解释原因。希望这会有所帮助。