我正在尝试Facebook服务器端登录(使用PHP),并且除了显示我的名字外,一切似乎都起作用。所以,我一直在遵循这个指南:https://developers.facebook.com/docs/howtos/login/server-side-login/,一切都像写在那里一样。我已经过去并删除了所有内容,以确保它是正确的。所以当我登录到我的网站时,我有时会得到“状态不匹配,你可能是CSRF的牺牲品”,但是我总是得到Hello。你好之后就是我的名字应该在的地方,但事实并非如此。所以很明显,登录和授权部分工作,但它不会显示我的名字。你们有谁知道可能是错的?使用Facebook登录用户服务器端登录不起作用
这里是我的代码:
<?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的作品(我认为),但当我试图回声$回应或$ _SESSION ['access_token']他们都是空白。当我试图回显出$ graph_url时,我得到“https://graph.facebook.com/me?access_token=”,没有任何背后的token =,其中access_token应该被连接在上面。我不知道这是连接问题,还是访问令牌为空,但我认为它是最后一个。我一次又一次地检查我的代码,当我将它与Facebook的网页上的代码进行比较时,没有任何问题。
认为你们可以找到任何东西?
编辑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必须与此完全相同。
但是,我遇到了更多的问题。看起来像ØØÅ这样的字母会在某处变形,并且Ø(这是我的姓氏)变成(Ã)(没有括号)。有谁知道如何解决这一问题?
你检查过'json对象'有一个名为'name'的索引吗? – 2013-02-19 18:46:13
嗨!我只是从他们的网页上复制了一切。所以我猜它有:P – Aleksander 2013-02-19 18:57:54