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

2019-07-04 04:54发布

首先,要得到这个出路,我已经花了几个小时翻翻答案在这里StackOverflow上这个问题,并试图解决它在我自己的,但它只是不工作(再)。 所以无论如何...

昨天,一切运行良好。 上床睡觉,醒来后,用Facebook登录不上我的网站2工作了。 登录链接向我要求我批准应用的Facebook页面,但它重定向我回网站后,并没有在记录我,我很快追踪)总是返回0。问题的getUser(所以我建立一个新的(测试)的应用程序有非常非常基本的代码,只是为了看看是否能工程。 事实并非如此。 下面的代码:

<?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>";
?>

在第二个答案在这里吸引我的目光。 我想,解决方案,它没有工作,所以我打开了base_facebook.php和滚动到该“代码”传递给一些变量的行 - 行458:

$代码= $这个 - >引用代码();

我回显的这一点,并正确显示从URL中传递的代码参数。 该问题的行原来是低于一个的一对夫妇行:

$ =的access_token $这 - > getAccessTokenFromCode($代码);

当通过$ 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)显示乱码的一个巨大的BLOB(我有点一个小白的,所以我不能从中读取几乎所有的东西是有道理的)。 我在那里看到是重复的唯一的事

SSL证书问题,验证该CA证书是确定。 详细信息:错误:14090086:SSL

这是多远我跟调试此。 任何帮助表示赞赏。 再次,昨天,一切都工作正常。 今天,没有一个单一的代码行改变了,它不工作了。 令人震惊=(噢,我运行WAMP与PHP 5.4.3

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

EDIT2:解决:

在base_facebook.php添加在$ CURL_OPTS以下2行:

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

Answer 1:

在base_facebook.php添加在$ CURL_OPTS以下2行:

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



Answer 2:

我认为你需要调用任何Facebook的方法之前,setAccessToken(),即使在使用已授权您的应用程序,并已登录。



Answer 3:

我有同样的问题。 原来,我是使用本地主机 。 虽然允许访问对话框出现在Facebook上,我被重定向回我的网页,仍然的getUser返回零。

我的解决办法

一旦我上传了我的代码,并在网上进行了测试 ,合理Facebook的错误出现了,然后我的“应用程序域”和“网站地址”更改相关值我的在线测试网站不是localhost。 然后,它的工作!



Answer 4:

我有这个问题,这竟然是一个腐败的证书。 我认为我有autocrlf在Git中开启。 我不知道这是否固定与否,但吹散了我的整个回购和再克隆从源造成这个问题明确的权利了!



文章来源: Facebook PHP SDK - getUser() suddenly returns 0