使用Facebook API无法注销
问题描述:
所以我创建了这个基本代码来使用Facebook登录/注销。一分钟前,一切正常,我正在改变的东西,然后突然,我无法注销。我将代码剥离到纯登录/退出行,但它仍然无法工作。我从来没有看到登录链接。即使我点击注销,我仍然可以看到我的电子邮件,显然我仍然可以访问我的Facebook信息。 这个API令我疯狂,只有今天早上getUser()总是返回0,无论我是否登录,现在都是相反的 - 即使我退出,它总是返回一个用户!使用Facebook API无法注销
<?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'];
?>
更新:OK,我猜的代码是好的,如果我尝试使用它从不同的计算机,它的工作原理确定的第一次,但我登录后,注销链接不会再工作。
答
很难知道发生了什么,因为您的代码是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
答
@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.
}
}
我希望这可以帮助你在出现更多问题的情况下。
答
$logoutUrl
从脸书注销。 要清除检索到的数据,您必须清除整个会话。
<a href='?sessionEnd'>seesion end</a>"
if(isset($_GET['sessionEnd'])){
session_destroy();
setcookie('PHPSESSID',false);
header('Location: /');
exit();
}