【问题标题】:Get Access Token from Facebook PHP SDK is not working properly从 Facebook PHP SDK 获取访问令牌无法正常工作
【发布时间】:2013-01-28 01:27:49
【问题描述】:

我正在尝试使用 PHP SDK 3.2.2 从 Facebook 检索访问令牌,这是我在 Facebook 成功登录后放置在重定向 URL 中的代码。我的问题是 $this->facebook->getAccessToken() 在用户授予对 APP 的访问权限后没有返回用户访问令牌,只是一个格式为:'AppId|AppSecret' 的字符串,并且我必须包含手动获取用户访问令牌的代码。这项工作,但我不知道为什么当我使用 getAccessToken 时没有返回正确的令牌。我还想知道是否有比使用 $code 更好的方法来检索用户访问令牌,因为我觉得这不是一个好方法。

注意:我使用 $this->facebook 是因为我将它作为 Codeigniter 库加载。

  $access_token  = $this->facebook->getAccessToken();

  //-------------------------------------------------------------------------
  //echo '<br/>Access Token: ' . $access_token;
  // Generare Token if not created:
  $code = $_REQUEST["code"];

  if ( isset($code) ) {
     //echo '<br/>Code Enviado: ' . $code;
     //exit();
     $appId     = $this->facebook->getAppId();
     $appSecret = $this->facebook->getAppSecret();

     $redirectTo = base_url('asociar/acc_facebook/step2/');

     $token_url="https://graph.facebook.com/oauth/access_token?client_id="
        . $appId . "&redirect_uri=" . urlencode($redirectTo)
        . "&client_secret=" . $appSecret
        . "&code=" . $code . "&display=popup";
     $response = file_get_contents($token_url);
     $params = null;
     parse_str($response, $params);
     $access_token = $params['access_token'];

     //echo '<br/>Repitiendo el Token';

     $this->facebook->setAccessToken($access_token);
     //echo '<br/>Second Access Token Fijado: ' . $access_token;
  }
  //-----------------------------------------------------------------------

更新:

这个问题是由于我将 CI 与 PHP SDK 一起使用(检查我自己的答案),但答案对任何使用 Facebook PHP SDK 有此问题的人都有效(检查@Imbru 答案)

【问题讨论】:

    标签: facebook codeigniter facebook-php-sdk facebook-access-token


    【解决方案1】:

    回复有点晚,但可能会对其他用户有所帮助。

    我今天也遇到了同样的问题。

    我的 access_token 未正确存储在 $_SESSION 中。显然,客户端只发送一次 access_token。您必须将其存储在内存中(SESSION)并重复使用。

    在正常情况下,Facebook PHP SDK 会这样做......

    编辑:有关更多解释,请参阅@Chococroc 回复

    【讨论】:

    • 嗨!我已将您的答案标记为已接受,因为尽管我没有检查它,但我很确定您是对的。 Codeigniter DON'T USE PHP NATIVE SESSIONS,它发送 cookie 中的所有数据,因此,当 Facebook SDK 尝试在 SESSION 中保存令牌的值时,它不能。
    【解决方案2】:

    @Imbru 指出了我的解决方案,如果有任何功劳,请给他。

    考虑到这一点:使用 Codeigniter 时,它将所有会话数据保存在 cookie 中并将其发送到浏览器,而不是将其存储在服务器中。是的,他们这样做了,但这会导致许多其他问题(例如,当您存储大量数据时会丢失会话,而浏览器只会将其中的一部分发回给您,但那是另一段历史了)。

    使用 CI,解决方案是覆盖会话核心类,用另一个使用 PHP $_SESSION 管理会话的会话类,例如,https://bitbucket.org/xperez/core-session-storage-for-codeigniter(我在我的项目中使用它,并且像一个魅力一样工作)。这样,当使用 PHP-sdk 时,您将保存会话中的值,当 Facebook 类尝试检索它们时,它将能够做到。

    当然,如果您在使用 Facebook PHP SDK 时遇到问题,请检查 $_SESSION 是否存储了您想要的值,因为问题是当您要检索它时服务器中没有该值,导致你出现不认证的错误。

    【讨论】:

      猜你喜欢
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 2014-10-08
      • 2023-03-27
      相关资源
      最近更新 更多