php - Facebook PHP SDK getUser() 方法即使在从 facebook 取消授权应用程序后也会返回 uid

标签 php facebook facebook-php-sdk facebook-authentication

我正在编写一个使用 facebook 的 PHP SDK 的网络应用程序。我使用 getUser() 方法来验证与此类似的用户:

    $user = $this->facebook->getUser();
    $loginUrl = $this->facebook->getLoginUrl(array(
        'scope' => 'email,publish_stream',
        'redirect_uri' => base_url() . 'index.php/welcome/create'
    ));;

    if(!$user){
        /*
         * User not authenticated, present with facebook authorize dialog
         * */
        echo "<script type='text/javascript'>window.location = '$loginUrl';</script>";
        die();

我不明白的是,为什么即使我从 facebook 的 facbeook 隐私设置中删除了该应用程序,getUser() 仍继续返回我的 facebook uid。有谁知道为什么吗?

最佳答案

这是因为用户 ID 仍在 session 中!

这主要是在使用 me 对象进行调用时导致错误(需要主动访问 token 或类似的东西)。

克服这个问题的一种方法是:

try {
    $user_profile = $this->facebook->api('/me');
} catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
    if(DESIRED_ERR_NUM && session_id()) {
        session_destroy(); // OR UNSET FB RELATED VARS ONLY
    }
    echo '<script>top.location.href = "' .  $this->facebook->getLoginUrl(array("scope"=>"publish_stream,user_about_me","redirect_uri"=>"YOUR_URL_HERE")) . '"</script>';
    exit;
}

不是有效代码,您需要检查错误号,如果您有 session ,则销毁它,或者只是取消设置其中与 Facebook 相关的变量。

您可以通过执行以下命令来检查这是否属实:

if(session_id()) {
    session_destroy();
}

(请注意,这会破坏 session 中的所有内容,而不仅仅是 Facebook 相关的内容!)

正如我所说,这不是一个有效的代码,但希望它能让您入门(这肯定可以得到增强,推送到 Facebook 类......等等)。

关于php - Facebook PHP SDK getUser() 方法即使在从 facebook 取消授权应用程序后也会返回 uid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6455884/

相关文章:

Facebook测试用户恶性循环: Publish_actions

php - UTF8数据库查询及特殊字符

php - 将mysql查询结果存储在数组中并在另一个查询中使用该数据

php - 如何在mysql中存储动态生成的复选框的详细信息

php - 如何使表单发送简单的 HTML 电子邮件而不是纯文本

facebook - 使用 Facebook API,获取成员资格等待批准的用户组列表

javascript - Facebook 无法读取 AngularJS 开发的页面上的动态 og 标签

c# - Facebook SDK CanvasAutorize 属性重定向我的 ajax 调用并且没有到达 Controller 代码

php - Facebook 应用程序成功发布到页面,但非开发人员看不到帖子。我真的必须审查只有 1 个用户的应用程序吗?

php - Facebook getLogoutUrl() 无法按预期工作