从Facebook获取访问令牌PHP SDK无法正常工作
我试图从Facebook使用PHP SDK 3.2.2检索访问令牌,下面的代码是我在Facebook中的成功用户登录后放置在重定向URL中的代码。我的问题是,在用户授予APP访问权限后,用户访问令牌不会返回用户访问令牌,而只是一种形式为'AppId | AppSecret'的字符串,我必须包括手动获取用户访问令牌的代码。这项工作,但我不知道为什么当我使用getAccessToken不回馈正确的令牌。我还想知道如果有更好的方法来检索用户访问令牌比用$ code,因为我不觉得这是一个很好的方法。从Facebook获取访问令牌PHP SDK无法正常工作
注意:我使用$ 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;
}
//-----------------------------------------------------------------------
UPDATE:
这个问题是由于我使用的CI与PHP SDK(检查我自己的这个答案),但得到的答复是有效的(任何人都具有与Facebook PHP SDK这个问题,检查@Imbru回答)
这个回应有点迟,但可能会对其他用户有所帮助。
今天我有同样的问题。
我的access_token未正确存储在$ _SESSION中。显然,客户端发送access_token一次。您必须将其存储在内存中(SESSION)并重新使用它。
在正常时间,Facebook的PHP SDK做...
编辑:见更多的解释
@Imbru指出我的解决方案@Chococroc响应,如果有信用,给他。
考虑到这一点:当使用Codeigniter时,它会将所有会话数据保存在cookie中并发送给浏览器,而不是将其存储在服务器中。是的,他们这样做,并导致许多其他问题(如存储大量数据时丢失会话,而浏览器仅将它们中的一部分发回给您,但这是另一个历史记录)。
对于CI,解决方案是用另一个用PHP $ _SESSION管理会话的会话类,例如https://bitbucket.org/xperez/core-session-storage-for-codeigniter(我在项目中使用它,像魅力一样工作)来覆盖会话核心类。通过这种方式,当使用PHP-sdk时,您将会保存会话中的值,并且当Facebook类将尝试恢复它们时,它将能够执行此操作。
当然,如果您在使用Facebook PHP SDK时遇到问题,请检查$ _SESSION是否存储了您想要的值,因为问题是当您想要检索时,服务器中没有该值它会导致您出现无法验证的错误。
嗨!我已经将你的答案标记为已接受,因为尽管我没有检查过,但我确定你是对的。 Codeigniter不使用PHP NATIVE SESSIONS,它发送cookie中的所有数据,因此,当Facebook SDK尝试在SESSION中保存令牌的值时,它不能。 – Chococroc 2014-06-15 08:12:06