2

我正在尝试 facebooks 服务器端登录(使用 PHP),除了显示我的名字之外,一切似乎都正常。所以,我一直在关注这个指南:https ://developers.facebook.com/docs/howtos/login/server-side-login/一切都和那里写的一样。我已经检查并删除了所有内容两次以确保它是正确的。因此,当我登录我的网站时,有时会收到“状态不匹配。您可能是 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 并将其输入我的网络浏览器时,我收到以下错误消息:

{
  "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 必须完全等于那个。

但是,我又遇到了一个问题。看起来像 Æ Ø Å 这样的字母在某个地方被扭曲了,而 Ø(我的姓)变成了 (ø)(没有括号)。有谁知道如何解决这一问题?

4

2 回答 2

2

您的应用设置似乎有问题。只需在“带有 FB 登录网址的网站 - 网站网址”字段中输入您的网站网址 - http://testing123.feedlobby.com/。将“应用程序域”字段留空。我建议创建一个新应用程序并以这种方式进行设置,然后使用您的新应用程序 ID 和密码。

此外,尝试将 echo 语句包含在 html 正文中。

于 2013-02-20T05:34:55.477 回答
0

您是否检查过您的应用程序设置和注册这可能是问题之一。在此处输入图像描述

于 2013-02-19T18:51:52.063 回答