【问题标题】:Facebook SDK - Unable to get sessionFacebook SDK - 无法获取会话
【发布时间】:2014-07-10 20:25:28
【问题描述】:

我正在使用 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。

【问题讨论】:

标签: php facebook codeigniter facebook-php-sdk facebook-sdk-4.0


【解决方案1】:

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

如果没有这些,你所能得到的只是用户的语言,以及他是否喜欢你 Canvas 应用所在的页面。就是这样。

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

我通常使用他们的 Javascript SDK 在画布应用中触发登录弹出窗口,以便用户停留在相同的窗口中。

希望对你有帮助!

【讨论】:

  • “如果他喜欢或不喜欢你 Canvas 应用所在的页面” - 这是 页面标签应用
  • “您需要他们登录到您的应用程序” - 我如何要求他们使用 PHP SDK 来执行此操作?
猜你喜欢
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多