facebook - 从 Facebook 获取访问 token PHP SDK 无法正常工作

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

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

注意:我使用 $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 答案)

最佳答案

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

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

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

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

关于facebook - 从 Facebook 获取访问 token PHP SDK 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14837659/

相关文章:

php - CodeIgniter 从传递单行到传递多行

php - 这不会让应用程序发布到 Facebook php

php - Facebook 允许取消订阅好友的请求

php - Facebook SDK (5.0) - 图形 API 请求 - 分页(如何获得所有结果)

ios - 使用 iOS 简单验证

Facebook 访问 token : server-side vs client-side flows

php - 我想从一个函数中获取单个值并在另一个函数中使用它 - codeigniter/php/mysql

codeigniter - 在CodeIgniter中实现数据库错误处理

facebook - 创建在社交网络上分享时每天更新的网页图像(如屏幕截图)

ios - iOS 上的 Facebook Deferred Deep Linking 是否有效,如何在商店发布应用程序之前对其进行测试?