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