【问题标题】:$facebook->getLogoutUrl(); link doesn't log user out of facebook$facebook->getLogoutUrl();链接不会让用户退出 Facebook
【发布时间】:2011-12-02 14:11:15
【问题描述】:

我当前的用户故事是 user1 登录到我的网站和 Facebook(这些帐户已连接等)。

User1 退出了我的网站,但没有退出 Facebook。

在此用户 2 登录到他的帐户后,用户 1 的剩余会话与用户 2 与我的网站的交互以及他们以谁的身份发帖。

所以为了解决这个问题,我检查了登录的用户是否真正拥有当前登录的 facebook(这将导致他们退出 facebook 等),并显示一个应该允许用户登录的链接出...

点击链接后,他们会转到 facebook 并返回该网站。但是如果你打开一个新标签并转到 facebook User1 仍然登录。

我怎样才能让这个链接正常工作.. 发生了什么事。这是api的错误还是什么?...

编辑:我已继续使用加载值用户 ID 和有效访问令牌进行测试,但我还没有让注销链接正常工作。

【问题讨论】:

  • > 此用户 2 登录到他的帐户后,但用户 1 的剩余会话与用户 2 与我的网站的交互以及他们发布的身份有关。 user2 是否在同一台计算机/浏览器上登录,或者“会话”是如何混淆的?您能否再详细说明一下,您所说的“会话”到底是什么意思?
  • 是的,同一个浏览器。这是一个不太可能发生的情况,因为人们很可能在离开计算机时退出他们的 Facebook 帐户,但问题仍然需要解决。基本上,如果 facebook 以 Person 1 的身份登录,但在我的网站 Person 2 登录,而 Person 1 仍登录到 facebook,则 Person 2 在我的网站上采取的任何操作都会拉出 Person 1 的 facebook 信息。我可以检测是否当前登录的 facebook 帐户和当前在我的网站上登录的用户是相同的,但如果不是,我需要先从 facebook 注销 Person 1
  • .... 这样我就可以将人 2 重定向到 facebook 身份验证屏幕
  • 我创建了一个简短的测试用例,根据 Facebook->getUser 是否给我一个用户 ID 显示登录或注销链接,并在 Firefox 12 中进行测试我得到了预期的行为:使用注销链接让我退出 Facebook - except 是因为重定向到我的网站后它仍然显示 logout 链接的小故障。在再次看到 login 链接之前,我必须刷新我的页面;我猜这是由于浏览器在重定向到我的页面之前识别 Facebook 设置的 cookie 存在问题(cookie 和重定向通常在浏览器中被证明有点困难)。
  • 嗯,我们的场景似乎是一样的。如果登录 facebook 的用户(需要注销)没有连接到我的应用程序,您认为会有什么不同吗? (他们以前没有使用过,接受了权限或任何东西,他们是普通的 facebook 用户)

标签: php session facebook logout facebook-authentication


【解决方案1】:

有点晚了,但这是我的贡献:

在生成注销 url 时使用参数,在那里重定向到您使用 Facebook API 函数销毁会话的页面。

这里是一个例子:

$logoutUrl = $facebook->getLogoutUrl(array("next" => "http://mydomain.com/page4logout"));

在 page4logout 中,您可以实例化 facebook 对象并执行以下操作:

$facebook->destroySession();

之后,您可以进行重定向。

【讨论】:

  • 我按照你的建议做了,但不是在不同的页面上。 $facebook->destroySession();必须发生在 $facebook = new Facebook(array( .. 是。所以我使用参数 ?logout=1 重定向到同一页面,然后在 $facebook = new Facebook(数组(它的工作原理。
  • @themis,为什么不接受这个答案?或者,如果任何其他解决了您的问题,只需通过接受来表示。我只是认为这样做是对的。谢谢。
【解决方案2】:

检查这一点的一种方法是同时使用 PHP SDK 和 JavaScript SDK。

当用户访问您的站点时,调用 FB.getLoginStatus() 并检查 authResponse.userID 是否与 PHP SDK 在 $facebook->getUser(); 中返回的内容相匹配(如果有帮助,您可以通过 AJAX 调用执行此操作)。

您知道,如果用户 ID 不匹配,那么这里就有问题。调用 $facebook->getLogoutUrl() 应该将用户从您的网站和 facebook 中注销,但如果没有,请尝试在您的代码中使用 session_destroy() 来清除会话。然后将用户重定向回 $facebook->getLoginUrl() 并让他们再次登录。这将纠正用户 ID 中的不匹配,当他们返回您的站点时,您可以重复该过程。

我在其他应用上看到过这种情况,这让我相信这是 Facebook 的问题。 JavaScript SDK 似乎不会检查 cookie 是否仍然有效(如果它已经存在)。

【讨论】:

    【解决方案3】:

    手动删除 facebook cookie 和 session。这是我前段时间解决问题的方法,它认为这是Facebook的错误:

    setcookie('fbs_'.$this->getAppId(), '', time()-100, '/', $_SERVER["SERVER_NAME"]);
    unset($_SESSION['fb_'.$this->getAppId().'_code']);
    unset($_SESSION['fb_'.$this->getAppId().'_access_token']);
    unset($_SESSION['fb_'.$this->getAppId().'_user_id']);
    unset($_SESSION['fb_'.$this->getAppId().'_state']);
    

    $this->getAppID 是你的 Facebook 应用 ID,应该清楚;o)

    【讨论】:

    • 如果登录 facebook 的用户未连接到我的应用程序,这会起作用吗?
    • 如果用户没有连接到您的应用程序,用户如何登录到您的页面?我不知道这是否可能......但是:执行此操作后用户肯定会注销。 (当 Facebook 重定向到您的页面时,您必须这样做......)
    • 如果第 1 个人登录 facebook 并离开计算机,但 facebook 仍处于登录状态。然后 user2 登录到我的网站。由于其他用户仍处于登录状态,它会显示一个权限对话框,要求他们将帐户链接在一起,这意味着新用户可以将他们在我网站上的帐户与其他人的 facebook 帐户链接。我想避免这种情况,如果 Facebook 帐户与用户之前连接的帐户不同,我不应该让他们将其链接起来,而是退出要求他们登录正确的 Facebook 帐户的广告。跨度>
    • user1 是否在您的页面上注销?如果是:您也可以在此时销毁 facebook 会话。之后user2没有任何问题......
    • 用户 1 可能不会使用我的网站,他们只是在 Facebook 上正常使用。基本上,如果我网站上的某个人以前与 facebook 有联系,我不希望该选项看起来甚至能够将其与这个已登录的随机 facebook 帐户链接起来。我希望能够检测到这个 facebook 帐户不是最初在我的网站上链接的人,因此它会注销 facebook 并要求他们再次登录
    猜你喜欢
    • 2012-12-09
    • 1970-01-01
    • 2011-06-13
    • 2012-02-26
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    相关资源
    最近更新 更多