所以我创建了这个基本代码,使用Facebook登录/注销。一分钟前一切正常,我正在改变东西然后突然,我无法退出。我将代码剥离到纯登录/输出行,但它仍然无法正常工作。我从未看到登录链接。即使我点击退出,我仍然会看到我的电子邮件,所以显然我仍然可以访问我的Facebook信息。 这个api让我发疯,只是今天早上getUser()总是返回0,无论我是否登录,现在它是相反的 - 它总是返回一个用户,即使我退出了!
<?php
require '../facebook-php-sdk/src/facebook.php';
$appID = '175698905xxxxxx';
$secret = 'cc8f99df86f7978c67xxxxxxxxxxxxx';
$facebook = new Facebook(array(
'appId' => $appID,
'secret' => $secret
));
// Get User ID
$user = $facebook->getUser();
$loginUrl = $facebook->getLoginUrl(array('req_perms' => 'email,read_stream,user_birthday'));
$logoutUrl = $facebook->getLogoutUrl();
if (!$user)
{
echo '<p><a href='.$loginUrl.'>Log in.</a></p>';
}
else
{
echo '<p><a href='.$logoutUrl.'>Log out.</a></p>';
}
$user_profile = $facebook->api('/me');
echo $user_profile['email'];
?>
更新:好的,我猜代码很好,如果我尝试从不同的计算机上使用它,它第一次就可以正常工作了,但是在我登录后,注销链接再次无效。
答案 0 :(得分:2)
很难知道发生了什么,因为你的代码 sorta 没问题。
考虑重置应用程序密钥,从应用程序列表中删除应用程序(如果您不使用测试用户,则在测试用户或配置文件中删除)并清除缓存。
另外要测试是否还有其他内容,请在try / catch中输入API调用并查看是否引发异常
if ($user) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
同样劳伦斯提到
...方法返回当前用户的Facebook用户ID,如果没有登录用户,则返回0
因此,除了额外的工作之外,为什么不直接切换它,以便无论如何定义$ user都可以调用注销URL。
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream,user_birthday'));
}
请注意,我使用的是scope
,这是最新PHP SDK中权限数组的可接受方式
答案 1 :(得分:0)
@phwd的解决方案非常棒。我使用以下setcookie()行增强了它:
if ($user) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) { //session was AFTER ALL invalid!
error_log($e);
$user = null; // we behave as if FB is logged-out (which it is actually!)
setcookie('fbm_'.$facebook->getAppId(), '', time()-100, '/', '.yourdomain.com'); //add this also just in case, even the latest php SDK has problem sometimes clearing this cookie. Now after a page refresh the php sdk will not return a userid.
}
}
我希望这可以帮助你解决进一步的问题。
答案 2 :(得分:0)
$logoutUrl
注销。
要清除检索到的数据,您必须清除整个会话。
<a href='?sessionEnd'>seesion end</a>"
if(isset($_GET['sessionEnd'])){
session_destroy();
setcookie('PHPSESSID',false);
header('Location: /');
exit();
}