只是想了解 Facebook 登录背后的哲学。

  1. 如果我登录 Facebook,我的网站就会接收到此信息并自动让我登录。
  2. 如果我退出 Facebook,那么我没有在 Facebook 中进行身份验证,网站仍然可以工作
  3. 如果我通过我的网站或 Facebook 登录,我就已通过身份验证,并且我可以作为经过身份验证的用户使用 Facebook 或我的网站
  4. 如果我随后注销 Facebook,我的应用程序仍会经过身份验证,但 Facebook 不会。
  5. 如果我注销我的应用程序并终止所有会话并手动删除 cookie,我可以成功注销。

我在两者都注销后遇到的问题是 $facebook->getUser();getAccessToken(); 仍然保留我使用过的 ID 和令牌。这些是从哪里来的?

我正在使用 PHP SDK

有帮助吗?

解决方案

当您使用 Facebook 登录应用程序时,您的应用程序会请求 Facebook 对您进行身份验证。身份验证成功后,Facebook 会告诉您的应用程序您已通过身份验证。然后,您的应用程序会维护自己的会话。

您在 Facebook 帐户或应用程序中所做的操作可能不会相互反映所做的更改。例如,当您注销 Facebook 帐户时,您的应用程序不会知道,因为就您的应用程序而言,您已经通过了身份验证。同时,当您注销 Facebook 时,Facebook 并没有告诉您的应用程序您已经注销了。

应用程序和 Facebook(或其他 OAuth 提供商)维护自己单独的会话。

对于您的问题:

  1. 是的,您的网站会将访问者重定向到 Facebook 中的一个链接,该链接会自动告诉您的客户您已登录。您不再看到提示,因为您在第一次尝试使用 Facebook 帐户访问应用程序时已授予应用程序权限。

  2. 由于会话是分开的,因此这会起作用。当您退出 Facebook 时,您仍然登录该应用程序。除非应用程序尝试通过 Facebook 再次验证您的身份 - 在这种情况下,身份验证将会失败。

  3. 这是正确的,但您无法在不登录 Facebook 的情况下登录您的应用程序,除非您有另一种无需 Facebook 即可对您的应用程序进行身份验证的方法(例如使用链接帐户进行替代登录)。但是,在这种情况下,您仍然需要使用 Facebook 的登录表单登录 Facebook。您无法通过您的应用程序登录 Facebook。

  4. 那是对的。如果您退出 Facebook,您就会退出 Facebook。由于会话是分开的,您也需要注销您的应用程序。

  5. 也正确。

您的情况可能发生的是:

  1. 您退出了您的应用程序
  2. 您将被重定向到您的主页
  3. 由于您尚未登录,您的主页尝试对您进行身份验证
  4. 您将被重定向到 Facebook
  5. Facebook 确认您的身份并重定向至应用程序
  6. 应用程序再次验证您的身份

为了解决这个问题,您的主页不应自动进行身份验证。在启动 Facebook 身份验证之前,用户必须单击一个按钮,例如“使用 Facebook 登录”。

您也不能“强制注销”用户退出 Facebook。因此,在使用您的应用程序后,您的用户必须注销您的应用程序和 Facebook。如果您的应用程序使用会话 cookie,则在浏览器关闭时用户将被注销。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top