まず、これを回避するために、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