8

まず、これを回避するために、StackOverflowでこの質問への回答を何時間もかけて調べ、自分で解決しようとしましたが、(もう)機能していません。そう、とにかく...

昨日、すべてがうまくいきました。寝て、起きて、Facebookでのログインが私の2つのWebサイトで機能しなくなりました。ログインリンクから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>";
?>

ここでの2番目の答えが私の目に留まりました。その解決策を試しましたが、うまくいきませんでした。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証明書の問題。CA証明書に問題がないことを確認してください。詳細:エラー:14090086:SSL

そして、これは私がこれをデバッグすることにどれだけ到達したかです。どんな助けでも大歓迎です。もう一度、昨日、すべてが正常に機能していました。現在、1行のコードを変更しないと、機能しなくなります。気が遠くなるような=(そうそう、私はPHP5.4.3でWAMPを実行しています

編集:エラーメッセージは次のとおりです: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でのログインが機能するので、そこにあります(そして、私はそれを持っています。これで1日が失われました、fml)。

EDIT3:この問題を修正する新しいSDKがリリースされました:https ://github.com/facebook/facebook-php-sdk

4

4 に答える 4

8

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

これがどの程度のセキュリティ問題なのかはわかりませんが、Login with Facebook が機能するようになるので、これで完了です。

編集: この問題を修正する新しい SDK がリリースされました: https://github.com/facebook/facebook-php-sdk

于 2012-11-27T19:50:44.710 に答える
1

使用がアプリを承認してログインしている場合でも、Facebookメソッドを呼び出す前にsetAccessToken()を実行する必要があると思います。

于 2013-02-13T11:55:45.617 に答える
0

この問題があり、証明書が破損していることが判明しました。Gitでautocrlfをオンにしていたと思います。それが修正されたかどうかはわかりませんが、リポジトリ全体を吹き飛ばし、ソースから再クローンすると、この問題は解決しました!

于 2014-02-03T20:06:25.353 に答える