我正在尝试使用 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/