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 结合起来?