2011-11-15 10 views
2

を返すことは、ここで多くのことを尋ねてきたが、私はまだ解決策を考え出すていません。ユーザーのIDを取得して、既に自分のアプリでフォームに記入しているかどうかを判断する必要があります。ここに私のコードです..

require_once('facebook.php'); 
$facebook = new Facebook(array( 
'appId' => 'xxxxxxxxxx', 
'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', 
'cookie' => false, 
)); 

$signed_request = $facebook->getSignedRequest(); 
$page_id = "fb" . $signed_request['page']['id']; 
$user_id = $facebook->getUser(); 

私はこれが関連しているかどうかわかりませんが、私はちょうどうまくページIDをつかむことができます。しかし、私以外のすべてのユーザーのための0として返す$user_id続けます。私は私のページの管理者なので、私はそれを推測しています。

は、誰もが、問題はここにあるものを知っていますか?

答えて

0

私もこの問題を抱えている、唯一の解決策は、許可要求 「user_about_me」と前のOAuthを使用することでした。 FBはOAuth 2.0の、ほとんどのユーザー値が隠されている使用して、あなたはこのすべてのsh * tの:( を要求する必要があるので

2

私の推測$facebook->getUser()と報告された問題のほとんどは、FacebookのPHPに組み込まれていますCSRF (Cross Site Request Forgery)保護に関連しているということですSDKとはやや厄介な実装です

CSRFの保護機能は、ユーザーのデータを取得する要求を同じサーバーから取得する必要があることを確認することです。これは、セッションにランダムなハッシュを格納することによって行います。この値が設定されていないのgetUser()、のgetUser()は常に

0だからユーザーは、CSが最初にあなたのサイトを訪問する必要が戻りますRFトークンが生成され、セッションに格納し、要求にのみあなたが成功してgetUser()を呼び出すことができます

あなたはPHP SDKのソースコードを見れば、あなたは道がこれを生成することがわかりますCSRFトークンはestablishCSRFTokenState()と呼ばれる保護されたメソッドを呼び出すことです。この動作を変更する(またはパブリックestablishCSRFTokenState()を作るために)、またはちょうどその時、ユーザー第一getLoginUrl(...)を呼び出すあなたは、外部からこのメソッドを呼び出すことはできませんし、それが呼び出される唯一の方法はあるので

$facebook->getLoginUrl(...)を呼び出すときに、いずれかのSDKのソースを変更しますあなたのサイトにアクセスします。セッションのサポートが有効になっていることを確認してください。

私はこれが非常にうまく設計されておらず、さらに悪化していると思います。そして、人々がそれを適切に使用する方法を理解していない限り、ほとんどの場合、CSRF攻撃からサイトを保護することは役立ちません。

関連する問題