我想知道是否可以在Facebook页面标签中获取用户的姓名或电子邮件。 我已经尝试这么做了很长一段时间了,而且似乎无法得到它。 旧的SDK很容易,但是有了这个,我需要FacebookRequest(),我只能在getSessionFromRedirect()之后得到它。 现在真正的问题是,当我将用户重定向回Facebook时,我失去了会话。
代码:
session_start();
define('BASE', 'http://www.example.com/');
define('APP_ID', '123456789');
define('APP_SECRET', 'qwerty');
define('FB_TAB', '//www.facebook.com/example?sk=app_' . APP_ID);
foreach (glob('Facebook/*.php') as $filename) { require_once $filename; }
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookRequestException;
if(isset($_SESSION['fb_session']) && !empty($_SESSION['fb_session']))
{
// if already logged print user info
$user_profile = (new FacebookRequest(
$_SESSION['fb_session'], 'GET', '/me'
))->execute()->getGraphObject(GraphUser::className());
echo 'Name: ' . $user_profile->getName(); die;
}
else
{
// otherwise redirect user to login
try {
FacebookSession::setDefaultApplication(APP_ID, APP_SECRET);
$helper = new FacebookRedirectLoginHelper(BASE);
$session = $helper->getSessionFromRedirect();
if($session)
{
// if has token save into session to use later
$_SESSION['fb_session'] = $session;
header('Location: ' . FB_TAB);
}
else
{
// get Facebook login url
echo '<script>top.location.href = "'.$helper->getLoginUrl().'";</script>'; die;
}
}
catch(FacebookRequestException $e) { var_dump($e); }
catch(\Exception $e) { var_dump($e); }
}
按步骤解释:
当我们进入Facebook页面标签时,我会检查$ _SESSION。因为这是我第一次找不到它,所以我将用户重定向到Facebook登录(getLoginUrl)。
当我们退出页面选项卡时,我得到了对象(getSessionFromRedirect)并将其保存在$ _SESSION中。到现在为止还挺好。问题就出在这里,在我保存$ _SESSION之后,我将用户重定向回Facebook页面标签(这就是它变得非常棘手)。
当用户进入页面标签时,我们假设该对象位于$ _SESSION内,但它已经消失。
所以问题是...... 使用SDK 4,有什么方法可以解决这个问题吗?或者有没有人知道如何在不获取此FacebookSession的情况下获取用户信息?
谢谢:)