2011-09-14 12 views
1

可能な複製を返します:ログインしていない場合
Why is Facebook PHP SDK getUser always returning 0?

は、Facebookの利用を認証するために、次のコードを使用して、ページにログインするためにそれらをリダイレクトアムまたは許可が必要です。問題は、getUser()が常に0を返して、コードがリダイレクトループに詰まることです。何か案は?

include_once("facebook.php"); 

$app_id = 'xxxxxxxxxxxx'; 
$app_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; 

// initialize facebook 
$facebook = new Facebook(array(
'appId' => $app_id, 
'secret' => $app_secret, 
)); 

$user = $facebook->getUser(); 
echo $user; 
if ($user) { 
try { 
    $fbme = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 
else 
{ 
$loginUrl = $facebook->getLoginUrl(array('scope' => 'email')); 
header('Location: '.$loginUrl); 
} 

答えて

1

これはsdk関連の問題ではなく、SDK(3.1)はうまくいきます。誤ってコンフィグレーションされていると、httpサーバによってグローバルがドロップされるような、_REQUESTの場合はgetUser()とPHP-SDKが自動的に失敗します。私は間違って設定されたnginxを使用していました。コードをトレースした後、〜3時間はvhostの設定変更によってこの問題を解決しました。

+1

どのような設定が間違っていましたか? – cawecoy

+0

私は今は正確には覚えていませんが、サーバの{}ブロックでアプリケーションにクエリーストリングの引数を正しく渡すために、nginxのvhostの設定を変更しました。答えは構成によって異なると私は思う。 – edigu

3

検索の日の後、Facebook APIを使用しているときに「コード」キー値を追加していないことがわかりました。検証するためにシステムが必要です

API関数$ facebook-> getLoginUrl()を使用すると、ログインページが表示されます(正しく認証されたとき)、ナビゲーションバーのcode = "x"パラメータで自分のWebサイトに戻ります。だから、Facebookオブジェクトをインスタンス化するときには、単にget要求を使ってこの情報を入れてください。

あなたのページはFacebookのAPIを再ロードする場合、そのキーの値のいずれかが がソート、 「コード」=> $ _GET [「コード」]であることを確認してください。..

私は図を持っていたことを本当に怒っこれは自分自身です。getLoginUrl()ドキュメントはこちらhttp://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/を見てください。返される内容はどこにも指定されていません。アプリが「許可」されていることを意味します。

また、http://developers.facebook.com/docs/reference/php/にあるPHP APIドキュメントのメインページには、必要なパラメータの最小数がアプリのシークレットとappIDであることが記載されています。これが当てはまる場合、なぜコードを追加すると問題が解決されるのでしょうか?

私はナンセンスを話している場合は、対応してください。私は私の方法のエラーを知りたい。:)

+0

これは私のために解決していません。あなたはhttp://stackoverflow.com/questions/9498937/why-is-my-test-application-in-an-endless-redirect-loopを見ることができます。 – codecowboy

+0

@codecowboy申し訳ありませんが、自分のコードをコピーして貼り付けるのに手間がかかり、「このようにしてください」と言います。この場合、私は助けません。コードを最小限に抑え、最小限の作業でどのように動作させるかを確認してください。推測すると、おそらくloginURLのscopeパラメータと関係があるでしょう。権限を承認するまで正式にログインしていません。権限が正しく設定されていないと権限のボックスは表示されません。だから、あなたのページにはあなたがログインしていないことがわかる無限ループが作成されますが、ログインページにはあなたがログインしているというメッセージが表示されますが、これは単なる推測です。 –

+0

「本当に私は自分自身でこれを理解しなければならないと怒っています。」 - そのドキュメントページでは、「詳細については認証ページを参照してください」と明示しています。リンクをたどり、別のページのいくつかの情報を読んでいる人があまりにも多くのことを尋ねているのであれば、自分自身に怒っているほうがいいかもしれません... – CBroe

関連する問題