检查是否已使用PHP SDK 4.0登录到facebook

时间:2014-05-29 14:20:55

标签: php facebook facebook-sdk-4.0

我想在导航到index.php时检查是否已经登录到facebook,这样我就会自动重定向到主页。

但是,我的代码只会在点击登录链接后进行检查。

Facebook\FacebookSession::setDefaultApplication(Globals::FB_APP_ID, Globals::FB_APP_SECRET);

$helper = new Facebook\FacebookRedirectLoginHelper("myurl");

try {
        $session = $helper->getSessionFromRedirect();

} catch (FacebookRequestException $ex) {
    // When Facebook returns an error
} catch (Exception $ex) {
    // When validation fails or other local issues
}

// see if we have a session
if (isset($session)) {
    // graph api request for user data
    $request = new FacebookRequest($session, 'GET', '/me');
    $response = $request->execute();
    // get response
    $graphObject = $response->getGraphObject();

    header("location:home.php");
} else {
    // show login url
    echo '<a href="' . $helper->getLoginUrl() . '">Login</a>';
}

我检查了一些关于Facebook PHP SDK的其他帖子,但没有太多关于sdk 4.0。没有什么对我有用..

我认为我可以在会话中添加一个令牌,但是如果我在第一次访问之前就已经登录到facebook那它就行不通......如果我没有从facebook注销它也会引起问题从我的网站退出。

1 个答案:

答案 0 :(得分:1)

由于我发现这个问题在没有回答的情况下经常被问到,我决定与社区分享我的所作所为。

我的代码中的$session变量包含一个访问令牌,可用于在其他任何地方重新执行会话,只需执行new FacebookSession('token')

考虑到这一点,当我第一次登录时,我会从$session中检索令牌并将其存储在$_SESSION中。然后,我创建了一个简单的util函数,首先检查是否设置了$_SESSION变量,然后尝试使用存储的令牌实现新的FacebookSession。如果stoken无效,会话将不会实例化,然后我可以在我的util函数中检测到它并返回用户实际登录与否。

请注意,当Facebook用户退出时,访问令牌无效。

登录网址+令牌存储:

FacebookSession::setDefaultApplication(Globals::FB_APP_ID, Globals::FB_APP_SECRET);


$helper = new Facebook\FacebookRedirectLoginHelper("http://localhost/PoubellesDeMerde/PoubellesDeMerde/index.php");

try {
        $session = $helper->getSessionFromRedirect();

} catch (FacebookRequestException $ex) {
    // When Facebook returns an error
} catch (Exception $ex) {
    // When validation fails or other local issues 
}

// see if we have a session
if (isset($session)) {
    // graph api request for user data
    $request = new FacebookRequest($session, 'GET', '/me');
    $response = $request->execute();

    $_SESSION['token'] = $session->getToken();
} else {
    // show login url
    echo '<a href="' . $helper->getLoginUrl() . '">Login</a>';
}

Util功能:

public static function isLoggedIn()
{
    $id=0;       
    if(isset($_SESSION['token']))
    {
        $session = new FacebookSession($_SESSION['token']);

        $request = new FacebookRequest($session, 'GET', '/me');
        $response = $request->execute();

        $graphObject = $response->getGraphObject();

        $id = $graphObject->getProperty("id");                        
    } 

    return $id!=0;
}