Facebook php SDK getLogoutUrl() 问题

Posted

技术标签:

【中文标题】Facebook php SDK getLogoutUrl() 问题【英文标题】:Facebook php SDK getLogoutUrl() problem 【发布时间】:2011-06-13 05:44:36 【问题描述】:

当我想从我的网站注销用户时,我使用:

$logoutUrl = $facebook->getLogoutUrl(array('next' => 'logout.php'));

$logoutUrl 显示正确的链接,但它不会将我重定向到下一个指定的 url。它会将我重定向到开始注销的页面。

看起来互联网上有很多文章,但它们都使用相同的方法,对于许多人来说这些方法不起作用。 如何正确从 facebook 注销用户,然后执行我的常规注销脚本?

编辑:这行得通,但仍需要一些基于非 javascriptSDK 的注销。

<a id="logout" href="logout.php" onclick="FB.logout(function(response)  window.location = 'logout.php' ); return false;" title="<?php echo $lang['logout']; ?>"><?php echo $lang['logout']; ?></a>

【问题讨论】:

【参考方案1】:

您应该使用绝对 URL。例如

//   (or https://)
$here = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$next = preg_replace('~#.*$~s', '', $here);
$next = preg_replace('~\?.*$~s', '', $next);
$next = preg_replace('~/[^/]*$~s', '/logout.php', $next);
$logoutUrl = $facebook->getLogoutUrl(array('next' => $next));

或者简单地说:

$logoutUrl = $facebook->getLogoutUrl(array('next' => 'http://...../logout.php'));

【讨论】:

【参考方案2】:

我知道这是旧的,但 getLogoutUrl() 没有重定向到您的“下一个”网址的原因是因为它根本不会注销用户或重定向。它只是为您提供了用于注销和重定向的正确 url(例如 header("Location: $logoutUrl"))。重定向后,用户将被注销并调用您的“下一个”url。

注意:在调用 getLogoutUrl() 之前不要清除 Facebook 会话变量(例如 destroySession)。如果这样做,返回的 url 中包含的访问令牌将等于 0,而不是您的访问令牌。

文档对此不太清楚,但该函数的命名非常恰当。

【讨论】:

以上是关于Facebook php SDK getLogoutUrl() 问题的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的 OAuthException Facebook PHP SDK

Facebook 登录:如何将 JavaScript 与 PHP SDK 结合起来?

Facebook PHP SDK启动程序代码

Facebook php SDK getLogoutUrl() 问题

facebook 使用 PHP SDK 打开图计数共享

Facebook-connect:无法使用PHP SDK + JS SDK注销