我正在使用A3M CodeIgniter库,更新了FB PHP-SDK 3.2。
我被迫从2.x更新,因为Facebook前几天退出了他们的“传统”连接方法,这就是a3m框架所使用的。所以我更新了SDK,现在无法让连接过程工作的原因有很多:
getLoginUrl()
CSRF state token does not match one provided
错误(如果我找到用户,则不使用getLoginUrl()
。)0
,即使我已登录FB。我真的不确定此时该做什么。
我的想法:
code
/ state
?不确定 REF:
https://github.com/facebook/facebook-php-sdk - FB SDK
https://github.com/pengkong/A3M-for-CodeIgniter-2.0 - A3M框架(我是其中的一员)。
想法?
答案 0 :(得分:2)
使用$facebook->destroySession()
销毁会话以获取用户0.
关于2个Facebook SDK代码在同一个处理程序中两次检查令牌时有一个错误。
我编辑了facebook.php
的getCode函数,如下所示:
protected function getCode() {
if (!isset($_REQUEST['code']) || !isset($_REQUEST['state']) || $this->state === null) {
return false;
}
if ($this->state === $_REQUEST['state']) {
// CSRF state has done its job, so clear it
$this->state = null;
$this->clearPersistentData('state');
return $_REQUEST['code'];
}
self::errorLog('CSRF state token does not match one provided.');
return false;
}
更清楚,如果被调用两次则不会声明无效令牌。
要清楚,如果例如:
,可以在同一个url处理程序上调用该函数两次 $facebook->getUser();
然后在同一个处理程序$facebook->getLogoutUrl()
中,getCode()
被调用两次,从而导致错误消息无效
答案 1 :(得分:0)
尝试将modules / account / helper中的fb_ca_chain_bundle.crt替换为https://github.com/facebook/facebook-php-sdk/tree/master/src
中的fb_ca_chain_bundle.crt