2011-12-03 4 views
0

私は手動でユーザーのデータを取得できますが、プログラム的には取得できません。サーバー側のコードを使用してfacebook認証を使用してユーザーのデータをプログラマチックに取得する方法は?

、それは、からされる - https://developers.facebook.com/docs/authentication/

<?php 

$app_id = "MY_APP_ID"; 
$app_secret = "MY_APP_SECRET"; 
$my_url = "ADDRESS_OF_CURRENT_PAGE"; 

session_start(); 
$code = $_REQUEST["code"]; 

if(empty($code)) { 
    $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection 
    $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
    . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state=" 
    . $_SESSION['state']; 

    echo("<script> top.location.href='" . $dialog_url . "'</script>"); 
} 

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; 

    $response = @file_get_contents($token_url); 
    $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)); 
    echo("Hello " . $user->name); 
} 
else { 
    echo("The state does not match. You may be a victim of CSRF."); 
} 

?> 

出力こんにちはだけで、ユーザー名は表示されません!

私はエコー-INGの$応答が$ token_urlとして適切な値を持って何も出力し、持っていないなどの問題が、のfile_get_contents()であると思います。

$response = @file_get_contents($token_url); 
  • PHPバージョン5.2.9 =
  • エラー報告はオフであるが、コードでこれを含む - error_reportingの(E_ALL)。出力しません。

更新日 - 私はこれを6ヶ月後に試してみました。それ以来変わったのは私のホスティングだけです。以前はHostBigを使っていました。 レッスン - $ 1/monthホスティングサービスに依存しないで、信頼できません。

+0

HRMは、あなたが "@" なしでそれを試してみましたか?それはエラーを抑制しています。 – finity

+0

過去にfile_get_contentsにあった1つの問題は、レスポンスヘッダーにエラーが含まれていると、実際のWebサーバーの応答データを提供しないことです。一方、ブラウザは一般的に応答を表示します。デバッグが簡単にはなりません。 – finity

+0

@finity私は '@'なしで試しました。実際には、私は数時間の期間にわたって、このコードの多数の順列/組み合わせを試しました!何も動作しません。 file_get_contents関数を避けることができますか? –

答えて

0

だから、私は6ヶ月後にこれを試みたが、それが働きました。それ以来変わったのは私のホスティングだけです。以前はHostBigを使っていました。

のfile_get_contentsを無効HostBigのPHPの設定、と間違って何かがおそらくありました()。

UPDATE - 私はHostBigの人と話しました。彼らは安全の理由からallow_url_fopenを無効にしており、より安全な代替手段としてcURLを提案しました。

0

あなたがローカルホストからこのコードを実行しようとしていますか?はいの場合は、動作しません。 Facebookにあなたのアプリを登録する際には、アプリのウェブサイトに入っている必要があります。サーバー上でスクリプトをアップロードし、app_id、シークレット、およびスクリプトのURLを編集します。それからそれを実行してみてください。

それも、その後に動作しない場合は、お使いの$dialog_url$token_urlをエコーし​​てみてください。最初に手作業でコピーして$dialog_urlをブラウザに貼り付けて、どのようなエラーが表示されるかを確認してください。認証を求める場合は、アプリを認証します。それはあなたをページに戻すでしょう。次に、$token_urlをブラウザで実行してみてください。これは、サーバーが提供している正確な応答を提供します。

+0

私はサーバー上で実行しています。そして私が言ったように、私は$ token_urlをエコーし​​てアドレスバーに貼り付けると、私はトークンと有効期限を取得します。私は同じトークンでグラフから情報を得るためにそのトークンを使用しました。 –

関連する問題