gpt4 book ai didi

php - Facebook PHP SDK - getUser() 突然返回 0

转载 作者:可可西里 更新时间:2023-11-01 12:34:21 26 4
gpt4 key购买 nike

首先,为了解决这个问题,我花了几个小时在 StackOverflow 上查看这个问题的答案,并尝试自己解决它,但它(不再)起作用了。所以无论如何...

昨天,一切正常。上床 sleep ,醒来,在我的两个网站上使用 facebook 登录不再有效。登录链接将我发送到 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>";
?>

here中的第二个答案吸引住了我的眼球。我尝试了该解决方案但它没有用,所以我打开了 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;
}

print_r($e) 显示一大堆乱码(我有点菜鸟所以我几乎无法从中读出任何有意义的东西)。我在那里看到的唯一重复的是

SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL

这就是我调试它所取得的进展。任何帮助表示赞赏。再一次,昨天,一切正常。今天,如果不更改一行代码,它就不再起作用了。令人难以置信 =(哦,是的,我正在使用 PHP 5.4.3 运行 WAMP

编辑:这是错误信息:http://i.imgur.com/TeY8h.png

EDIT2:解决了:

在 base_facebook.php 中,在 $CURL_OPTS 下添加以下两行:

CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 2

这使得它...

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
);

我不确定这有多大的安全问题,但它使使用 Facebook 登录可以正常工作,所以你知道了(我也知道了。一整天都浪费在这个上面,fml)。

EDIT3:发布了解决此问题的新 SDK:https://github.com/facebook/facebook-php-sdk

最佳答案

在 base_facebook.php 中,在 $CURL_OPTS 下添加以下两行:

CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 2

这使得它...

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
);

我不确定这是一个多么严重的安全问题,但它可以让“使用 Facebook 登录”正常工作,所以你知道了。

编辑:发布了解决此问题的新 SDK:https://github.com/facebook/facebook-php-sdk

关于php - Facebook PHP SDK - getUser() 突然返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13589510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com