题
只是想了解 Facebook 登录背后的哲学。
- 如果我登录 Facebook,我的网站就会接收到此信息并自动让我登录。
- 如果我退出 Facebook,那么我没有在 Facebook 中进行身份验证,网站仍然可以工作
- 如果我通过我的网站或 Facebook 登录,我就已通过身份验证,并且我可以作为经过身份验证的用户使用 Facebook 或我的网站
- 如果我随后注销 Facebook,我的应用程序仍会经过身份验证,但 Facebook 不会。
- 如果我注销我的应用程序并终止所有会话并手动删除 cookie,我可以成功注销。
我在两者都注销后遇到的问题是 $facebook->getUser();
和 getAccessToken();
仍然保留我使用过的 ID 和令牌。这些是从哪里来的?
我正在使用 PHP SDK
解决方案
当您使用 Facebook 登录应用程序时,您的应用程序会请求 Facebook 对您进行身份验证。身份验证成功后,Facebook 会告诉您的应用程序您已通过身份验证。然后,您的应用程序会维护自己的会话。
您在 Facebook 帐户或应用程序中所做的操作可能不会相互反映所做的更改。例如,当您注销 Facebook 帐户时,您的应用程序不会知道,因为就您的应用程序而言,您已经通过了身份验证。同时,当您注销 Facebook 时,Facebook 并没有告诉您的应用程序您已经注销了。
应用程序和 Facebook(或其他 OAuth 提供商)维护自己单独的会话。
对于您的问题:
是的,您的网站会将访问者重定向到 Facebook 中的一个链接,该链接会自动告诉您的客户您已登录。您不再看到提示,因为您在第一次尝试使用 Facebook 帐户访问应用程序时已授予应用程序权限。
由于会话是分开的,因此这会起作用。当您退出 Facebook 时,您仍然登录该应用程序。除非应用程序尝试通过 Facebook 再次验证您的身份 - 在这种情况下,身份验证将会失败。
这是正确的,但您无法在不登录 Facebook 的情况下登录您的应用程序,除非您有另一种无需 Facebook 即可对您的应用程序进行身份验证的方法(例如使用链接帐户进行替代登录)。但是,在这种情况下,您仍然需要使用 Facebook 的登录表单登录 Facebook。您无法通过您的应用程序登录 Facebook。
那是对的。如果您退出 Facebook,您就会退出 Facebook。由于会话是分开的,您也需要注销您的应用程序。
也正确。
您的情况可能发生的是:
- 您退出了您的应用程序
- 您将被重定向到您的主页
- 由于您尚未登录,您的主页尝试对您进行身份验证
- 您将被重定向到 Facebook
- Facebook 确认您的身份并重定向至应用程序
- 应用程序再次验证您的身份
为了解决这个问题,您的主页不应自动进行身份验证。在启动 Facebook 身份验证之前,用户必须单击一个按钮,例如“使用 Facebook 登录”。
您也不能“强制注销”用户退出 Facebook。因此,在使用您的应用程序后,您的用户必须注销您的应用程序和 Facebook。如果您的应用程序使用会话 cookie,则在浏览器关闭时用户将被注销。