使用Facebook SDK 4在标签内获取用户信息

时间:2014-09-30 14:00:54

标签: php facebook session facebook-sdk-4.0

我想知道是否可以在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); }
}

按步骤解释:

  1. 当我们进入Facebook页面标签时,我会检查$ _SESSION。因为这是我第一次找不到它,所以我将用户重定向到Facebook登录(getLoginUrl)。

  2. 当我们退出页面选项卡时,我得到了对象(getSessionFromRedirect)并将其保存在$ _SESSION中。到现在为止还挺好。问题就出在这里,在我保存$ _SESSION之后,我将用户重定向回Facebook页面标签(这就是它变得非常棘手)。

  3. 当用户进入页面标签时,我们假设该对象位于$ _SESSION内,但它已经消失。

  4. 所以问题是...... 使用SDK 4,有什么方法可以解决这个问题吗?或者有没有人知道如何在不获取此FacebookSession的情况下获取用户信息?

    谢谢:)

0 个答案:

没有答案