2

Facebookサーバー側のログイン(PHPを使用)を試していますが、自分の名前を表示する以外はすべて機能しているようです。だから、私はこのガイドに従っています:https://developers.facebook.com/docs/howtos/login/server-side-login/すべてがそこに書かれているとおりです。正しいことを確認するために、すべてを2回削除しました。そのため、サイトにログインすると、「状態が一致しません。CSRF の被害者である可能性があります。」というメッセージが表示されることがありますが、その後は常に Hello が表示されます。こんにちはの直後に私の名前があるはずですが、そうではありません。したがって、ログインと承認の部分が機能することは明らかですが、私の名前は表示されません。何が間違っているのか知っている人はいますか?

これが私のコードです:

<?php 

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

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'] . "&scope=user_birthday,read_stream";

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

if($_SESSION['state'] && ($_SESSION['state'] === $_REQUEST['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);

    $_SESSION['access_token'] = $params['access_token'];

    $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.");
}

?>
<!DOCTYPE html>
<html>
<head>
   <title>Personal testing site</title>
</head>
<body>
  <p>This is a personal testing site, and is not related to *mysite* or any of their upcoming functions/ products. </p>
</body>
</html>

編集1:

エラーの場所がわかったと思いますが、まだ修正方法がわかりません。そのため、コードを調べていて、コードの特定の部分をエコーアウトしようとすると、access_token が空であることがわかりました。したがって、 $token_url は機能しますが (私は思います)、$response または $_SESSION['access_token'] をエコーアウトしようとすると、両方とも空白になります。そして、$graph_url をエコーアウトしようとすると、" https://graph.facebook.com/me?access_token= " が表示されます。token= の後ろには何も表示されず、access_token が連結されているはずです。連結が問題なのか、アクセストークンが空なのかはわかりませんが、最後だと思います。私は自分のコードを何度も見直してきました。

君たちは何かを見つけることができると思いますか?

編集2:

$token_url をエコーし​​て Web ブラウザに入力すると、次のエラー メッセージが表示されます。

{
  "error": {
    "message": "Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request",
    "type": "OAuthException",
    "code": 100
  }
}

Facebook は https で動作しているのに、私のサイトは http しか使用していないという事実と何か関係があると思いますか?

編集3:

これが私のアプリのセットアップの写真です: *Deleted_Picture*

編集4:

さて、私はそれを修正しました。問題は、アプリ設定の URL に最後の / が必要であり、コードの $my_url がそれとまったく同じでなければならないことでした。

しかし、もう 1 つ問題が発生しました。Æ Ø Å のような文字がどこか歪んでいるようで、Ø (姓に含まれます) が (Ø) (括弧なし) になります。これを修正する方法を知っている人はいますか?

4

2 に答える 2

2

アプリの設定に問題があるようです。ウェブサイトの URL - http://testing123.feedlobby.com/を [FB ログイン URL のあるウェブサイト - サイト URL] フィールドに入力するだけです。「アプリ ドメイン」フィールドは空のままにします。新しいアプリを作成してこのように設定し、新しいアプリ ID とシークレットを使用することをお勧めします。

また、エコー ステートメントを html 本文内に囲むようにしてください。

于 2013-02-20T05:34:55.477 に答える
0

アプリケーションの設定と登録を確認しましたか、これが問題の 1 つかもしれません。ここに画像の説明を入力

于 2013-02-19T18:51:52.063 に答える