GTC*_*ais 8 php facebook facebook-php-sdk facebook-login
首先,为了解决这个问题,我花了几个小时在StackOverflow上查看这个问题的答案,并尝试自己解决它,但它只是不起作用(不再)了.所以无论如何...
昨天,一切正常.去睡觉,醒来,用facebook登录在我的2个网站上不再工作了.登录链接将我发送到Facebook页面,这需要我批准应用程序,但在它重定向回到网站后,它不会登录我.我很快跟踪问题,getUser()总是返回0.所以我使用非常非常基本的代码设置一个新的(测试)应用程序,只是为了看看它是否有效.它没有.这是代码:
<?php
session_start();
require_once("facebook.php");
$config = array();
$config['appId'] = '199971880127910'; //test app so I don't mind showing these
$config['secret'] = 'e065588cb1edd96f821de8b3d362c488';
$config['trustForwarded'] = true;
$facebook = new Facebook($config);
try {
$user = $facebook->getUser();
var_dump($user);
} catch (Exception $e) {
$e->getMessage();
}
$loginUrl = $facebook->getLoginUrl(array('redirect_uri' => 'http://gtcrais.redirectme.net/test/'));
echo "<a href='".$loginUrl."'>Login</a>";
?>
Run Code Online (Sandbox Code Playgroud)
在第二个答案在这里吸引我的目光.我尝试了这个解决方案并且它不起作用,所以我打开了base_facebook.php并滚动到"代码"传递给某个变量的行 - 第458行:
$ code = $ this-> getCode();
我回应了这一点,它正确显示了从URL传递的代码参数.有问题的行原来是那一行下面的一对行:
$ access_token = $ this-> getAccessTokenFromCode($ code);
传递$ code变量时,此函数将值false返回给$ access_token.在该函数中,这部分代码抛出异常:
try {
// need to circumvent json_decode by calling _oauthRequest
// directly, since response isn't JSON format.
$access_token_response =
$this->_oauthRequest(
$this->getUrl('graph', '/oauth/access_token'),
$params = array('client_id' => $this->getAppId(),
'client_secret' => $this->getAppSecret(),
'redirect_uri' => $redirect_uri,
'code' => $code));
} catch (FacebookApiException $e) {
// most likely that user very recently revoked authorization.
// In any event, we don't have an access token, so say so.
print_r($e);
return false;
}
Run Code Online (Sandbox Code Playgroud)
print_r($ e)显示了一大堆乱码(我有点像菜鸟,所以我几乎无法阅读任何有意义的东西).我在那里看到的唯一重复是
SSL证书问题,验证CA证书是否正常.详细信息:错误:14090086:SSL
这就是我调试这个问题的过程.任何帮助表示赞赏.再一次,昨天,一切都运转良好.今天,如果没有一行代码更改,它就不再起作用了.令人难以置信=(哦,是的,我正在使用PHP 5.4.3运行WAMP
编辑:这是错误消息:http://i.imgur.com/TeY8h.png
编辑2:解决:
在base_facebook.php中,在$ CURL_OPTS下添加以下2行:
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 2
Run Code Online (Sandbox Code Playgroud)
这使它...
public static $CURL_OPTS = array(
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
CURLOPT_USERAGENT => 'facebook-php-3.2',
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 2
);
Run Code Online (Sandbox Code Playgroud)
我不确定这有多大的安全问题,但它使登录与Facebook工作,所以你有它(我有它.整个一天迷失了,fml).
EDIT3:发布的新SDK修复了这个问题:https://github.com/facebook/facebook-php-sdk
在base_facebook.php中,在$ CURL_OPTS下添加以下2行:
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 2
Run Code Online (Sandbox Code Playgroud)
这使它...
public static $CURL_OPTS = array(
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
CURLOPT_USERAGENT => 'facebook-php-3.2',
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 2
);
Run Code Online (Sandbox Code Playgroud)
我不确定这有多大的安全问题,但它使登录与Facebook工作,所以你有它.
编辑:发布的新SDK解决了这个问题:https://github.com/facebook/facebook-php-sdk
| 归档时间: |
|
| 查看次数: |
10004 次 |
| 最近记录: |