在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似乎没有处理代码。
感谢您的帮助!
答案 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,它对我有用,无法解释原因。希望这会有所帮助。