我对facebook api完全不熟悉,我想问一下,最简单快捷的方法是知道一个人是否登录了facebook。
我想要的一个解决方案是发送一个javascript或php请求,看看我是否得到一些状态代码,告诉我该人是否登录(如果它返回404,那么这意味着他没有登录)。
更新
我发现这很容易“黑客”:
function logged() {
alert('logged');
}
function notlogged() {
alert('not logged');
}
</script>
<script src="http://www.facebook.com/ajax/composer/attachment/question/question.php" onload="logged()" onerror="notlogged()">
但它不起作用...但是,这就是我要寻找的代码类型..代码将发送请求,如果失败,则会抛出错误
**update**
我不想引起用户的任何怀疑我正在检查他是否已登录。所以如果使用app_id,那么我认为我需要用户使用我的应用程序的权限..这是我需要采取另一种认证步骤。
我无法让用户知道他正在以任何方式对Facebook进行身份验证
答案 0 :(得分:1)
如果我正确读取您的代码,只有在没有返回会话时才进行重定向吗?根据Facebook的例子中的评论:http://github.com/facebook/php-sdk/blob/master/examples/example.php(这个信息的好地方吧?),即使你回来了,你也不能认为它仍然有效。只有尝试一个需要登录用户的API调用才能确定。这是我看到可靠地确定登录/注销状态的最佳方式。
if ($session) {
try {
$me = $facebook->api('/me');
if ($me) {
//User is logged in
}
} catch (FacebookApiException $e) {
//User is not logged in
}
}
答案 1 :(得分:1)
试试这个,希望这会有所帮助
include 'facebook.php';
$facebook = new Facebook(array(
'appId' => $app_id, // your application id
'secret' => $app_secret, // your application secret
'cookie' => false,
));
$user = $facebook->getUser();
$loginUrl = $facebook->getLoginUrl(
array(
'scope' => '// put your permission'
)
);
if ($user) {
try {
// Proceed knowing you have a logged in user who's authenticated.
$permissions = $facebook->api('/me/permissions');
} catch (FacebookApiException $e) {
$user = null;
}
}
if (!$user) {
echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
}
答案 2 :(得分:0)
如果您有Facebook“标签”,则会在signed_request中提供有限的用户信息。对于Facebook标签,您需要创建一个应用程序。
否则,如果没有应用程序ID并提醒用户,您就不能这样做。
过去曾经有一些黑客攻击,一些聪明的人已经提出了评论框并测量了包含DIV的密度(如果登录它们曾经更大)或者包含facebook的FBML标签来显示一个登录按钮(登录更宽),但这些都被发现时被删除了。您在问题中尝试的链接可能也是如此。
Facebook,关于rpivacy的所有争论,都不会知道泄露信息 - 在你获得应用程序ID之前,询问用户然后你几乎可以得到所有东西......
答案 3 :(得分:-1)
检查此主题:https://stackoverflow.com/a/10698594/1789650
这应该回答你的问题。您必须加载JavaScript SDK才能使其正常工作。