私は、Graph APIを簡単に呼び出すために、PHP SDKバージョン3.1.1を使用しています。私はそれをローカルでhttp://local.fb-sandboxで実行しています。 Facebookのアプリケーション設定では、サイトURLがhttp://local.fb-sandbox/に設定されています。テストアプリケーションが無限のリダイレクトループになっているのはなぜですか?
私はhttp://local.fb-sandboxに行くが、アプリケーションは、その後のようなURLの間のリダイレクトループに入るとき、私は私の許可を要求してFacebookのログインページにリダイレクトし、ページにしています:
http://local.fb-sandbox/?state=e9c091bb61afe08139af4e3b153a1e9e&code=AQBDJ4yMWVOIrukx6nRkxhNbnPH9nX6OvuqOWhVJEAgLkq6Lz27iq_-B6AIAGQ_cOpBIZktCPLLs_G5Hpt8QO5PRhDUN8l-Yu3JuT0YTzwVQiAqBlgutgia60lRT-ZzE3IHguStHq4gtuPQYJh423TBer-mB8BsqERvNsoF1L4NNe90WAWU8--MFAU3Oc4eeXyI#_=_
と
https://www.facebook.com/dialog/oauth?client_id=375741229103324&redirect_uri=http%3A%2F%2Flocal.fb-sandbox%2F%3Fstate%3Dccd13778febb68d3eb1f4763a99b2ace%26code%3DAQBFegtkch4m34-2F9KMKgScrPhWzI0qeKJlvnM6uAD81BYm2xakv0S7DEbUrNwlECrgth5-YHdT8IR_vCBzW29QMh3ecOiiEk7P03wQG2V2gaxAUsMqOOZvTl_Oq3SefiLn9BvBAPQSGXQdRSZBVdsUqDT1aZ430Lcx8Ic6axaHSyHwlkkNK5EjRhYdkjYYz0YmENk64kRf4tvmX4WrH6f4&state=19a3862962dd0422628eb7c28a832380&scope=email%2Cread_stream%2Cpublish_stream%2Cuser_photos%2Cuser_videos&fbconnect=1#_=_
私はスクリプトの先頭にsession_start()を呼び出していますが、その両方を試してみました。 PHPのクッキーがうまくセットされています。
このリダイレクトループに関して、ここで多くの類似の質問がありましたが、提案された回答のどれもそれを解決しておらず、かなり古いものです。これはローカルホスト上で動作する必要がありますか? AM Facebookのアプリ設定でアプリケーション設定が欠けていますか? http://developers.facebook.com/docs/authentication/が、それは動作します:
UPDATEだから、あなたがここからのコードを使用している場合ようです。 githubのphp-sdkの例ではこれを完全に無視しています。「code」が設定されているかどうかをチェックし、独自のCSRFトークンを生成する必要があるという事実は含まれていません。次に、Graph APIを呼び出す前にアクセストークンを取得するための呼び出しを行う必要があります。
また、SDKのgetLoginURL()メソッドは、動作していないhttps:// URLを返します。自分のURLを作っていればうまくいきます。
WORKING CODE:私はそうのfile_get_contentsのコンテキストを設定する必要がプロキシを介しつもりです
if(empty($code)) {
$_SESSION['state'] = md5(uniqid(rand(), TRUE));
$login_url_params = array(
'scope' => 'email,read_stream,publish_stream,user_photos,user_videos',
'fbconnect' => 1,
'redirect_uri' => 'http://local.fb-sandbox/',
'state'=>$_SESSION['state']
); //using this array via the sdk does not work
$dialog_url = "http://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
. $_SESSION['state']; //this url works
//var_dump($dialog_url);echo "<br />";
$login_url = $facebook->getLoginUrl();
//var_dump($login_url);
header("Location:{$dialog_url}");//works
//header("Location:{$login_url}");//does not work
exit;
}
if($_REQUEST['state'] == $_SESSION['state']) {
$token_url = "https://graph.facebook.com/oauth/access_token?"
. "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret . "&code=" . $code;
$aContext = array(
'http' => array(
'proxy' => 'tcp://xxxx0:80',
'request_fulluri' => true,
),
);
$cxContext = stream_context_create($aContext);
$response = file_get_contents($token_url, FALSE, $cxContext);
$params = null;
parse_str($response, $params);
$graph_url = "https://graph.facebook.com/me?access_token=" . $params['access_token'];
$user = json_decode(file_get_contents($graph_url, FALSE, $cxContext));
//var_dump($user);exit;
}
//var_dump($user);exit;
return $app->render('test.html',array('myvar', $user));
exit();
注()を呼び出します。
誰かが適切なSDKメソッドを使用してコードを変換して機能させることができれば(私はそれがプロキシの背後で働くために必要であることに注意してください)、あなたは賞金を得るでしょう。
同じ問題を持ちます。ユーザーがアプリを初めて認証したときにのみ発生します。私にあなたと同じエラーを与えるPHP。 – sgb
** var_dump($ user); **出力は何ですか? –
@GilBirman: '0 ' – codecowboy