Facebook SDK -无法获得会话


Facebook SDK - Unable to get session

我使用CodeIgniter制作画布应用程序(这很重要),而不是web应用程序。在我看来,这意味着我不必像传统的Facebook Connect应用程序那样登录用户,通过将他们转发到登录URL。Facebook应该处理这个问题。

然而,尽管我得到了一个完整签名的请求,但我无法获得会话。下面是我的代码:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
use Facebook'FacebookSession;
use Facebook'FacebookRequest;
use Facebook'GraphUser;
use Facebook'FacebookRequestException;
use Facebook'FacebookCanvasLoginHelper;
class Welcome extends CI_Controller {
    public function index()
    {
        FacebookSession::setDefaultApplication('303962883111629', '71b94393839fc34d2cfd43006791c5ca');
        $helper = new FacebookCanvasLoginHelper();
        try {
            $session = $helper->getSession();
            echo '<pre>';
            print_r($helper);
            echo '</pre>';
        } catch(FacebookRequestException $e) {
            // When Facebook returns an error
            echo "Exception occured, code: " . $e->getCode();
            echo " with message: " . $e->getMessage();
        } catch('Exception $e) {
            // When validation fails or other local issues
            echo "Exception occured, code: " . $e->getCode();
            echo " with message: " . $e->getMessage();
        }
        if ($session) {
            // Logged in
            $me = (new FacebookRequest(
                $session, 'GET', '/me'
            ))->execute()->getGraphObject(GraphUser::className());
            echo '<pre>$me: '.print_r($me, true).'</pre>';
        }
    }
}

输出如下(一些值由于明显的原因被删除):

Facebook'FacebookCanvasLoginHelper Object
(
    [signedRequest:protected] => Facebook'Entities'SignedRequest Object
        (
            [rawSignedRequest] => FmHcCuoY8lW9MXgqu5jQYrdzXQAhSC1GtCdPzeX**[partially-removed]**XNlciI6eyJjb3VudHJ5IjoiZ2IiLCJsb2NhbGUiOiJlbl9HQiIsImFnZSI6eyJtaW4iOjIxfX19
            [payload] => Array
                (
                    [algorithm] => HMAC-SHA256
                    [issued_at] => 1405023802
                    [user] => Array
                        (
                            [country] => gb
                            [locale] => en_GB
                            [age] => Array
                                (
                                    [min] => 21
                                )
                        )
                )
        )
    [appId:protected] => **[removed]**
    [appSecret:protected] => **[removed]**
    [state] => 
)

$session已设置,但为NULL

在Canvas Facebook应用程序中,你需要请求用户授权你的应用程序恢复他们的唯一标识符(和其他一些东西)。

你所能得到的就是用户的语言

,以及他是否喜欢你的Canvas应用所在的页面。就是这样。

所以,是的,你需要他们登录到你的应用程序,然后你将能够访问他们的唯一标识符。否则,您将始终得到NULL答案。

我通常使用他们的Javascript SDK在canvas应用程序中触发登录弹出框,这样用户就可以保持在相同的窗口中。

我希望这对你有帮助