我终于让我的facebook登录工作了,所以我可以从用户那里检索信息
<?php
session_start();
require_once 'facebook.php';
$facebook = new Facebook(array(
'appId' => '19582352346693',
'secret' => '44c21dde8d502ega23g287a751dea',
'cookie' => true,
));
$user_id = $facebook->getUser();
?>
<html xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>Picture</title>
</head>
<body>
<?php
if($user_id) {
// We have a user ID, so probably a logged in user.
// If not, we'll get an exception, which we handle below.
try {
$test = null;
$user_profile = $facebook->api('/me','GET');
//$test = $user_profile['id'];
echo "id: " . $user_profile['id'];
} catch(FacebookApiException $e) {
// If the user is logged out, you can have a
// user ID even though the access token is invalid.
// In this case, we'll get an exception, so we'll
// just ask the user to login again here.
$login_url = $facebook->getLoginUrl();
echo 'Please <a href="' . $login_url . '">login.</a>';
error_log($e->getType());
error_log($e->getMessage());
}
} else {
// No user, print a link for the user to login
$login_url = $facebook->getLoginUrl();
echo 'Please <a href="' . $login_url . '">login.</a>';
}
?>
</div>
</body>
</html>
所有这些代码都会给我一个登录,因为我没有登录到APP(Authenticated)。当我按下按钮时,我可以看到我的信息,因为我回应它。
当我按下我页面上的另一个按钮时:
<form action="<?php echo 'single_picture.php?argument=' . $picture_id ?>" method="post">
<input type="submit" name="submit" value="Vote!">
</form>
我再次打开同一页面,但登录按钮再次显示,忘记了我正在登录的所有内容。
我认为if / else正在检查我是否正在登录。
我也尝试打印出我的访问令牌
$access_token = $facebook->getAccessToken();
然后我把它放进:http://developers.facebook.com/tools/debug
这表示访问令牌有效一小时
我做错了什么?
答案 0 :(得分:1)
您需要将从facebook获得的访问令牌存储到某个位置。无论是会话,数据库表还是简单的文本文件。在neyt请求之前,您设置此令牌($facebook->setAccessToken($saved_access_token);
),只要它仍然有效。
答案 1 :(得分:0)
首先,你的语法如此令人困惑。 我想你忘了使用sesion_start
<?php session_start() ?>
或检查cookies。
答案 2 :(得分:0)
我知道这不是你想要的,你给了我你的问题,我给你一个不同的答案,但请把它作为一个建议。我在使用Facebook登录时所做的是创建自己的登录系统,对于Facebook用户,我有另一个存储用户Facebook ID的表,然后我只使用Facebook API检查我的数据库是否有效。如果是,则我将用户登录。如果不是,则将其发送到错误页面或注册页面。