我该如何处理用户退出Facebook,但仍然登录在我的网站


How should I handle a user logging out of Facebook but remaining logged in on my website?

我设置的方式是,当用户第一次访问网站时,它会要求他们登录Facebook。它获得一个访问令牌并在我的站点上创建一个会话。

如果用户在任何时候退出facebook,比如在另一个选项卡中,会话仍然存在于我的应用程序中。

我能看到检测用户是否仍然登录到Facebook的唯一方法是重新请求访问令牌,因为似乎没有办法检查现有的访问令牌是否仍然有效。

我试着简单地做:

file_get_contents('https://graph.facebook.com/me?access_token=xxx')

但是,由于令牌不再有效(因为用户已经注销),file_get_contents返回一个错误,尽管在浏览器中查看此错误会显示oauth异常,但我假设file_get_contents出错是因为HTTP响应代码

我认为你可以这样做:

@$data=file_get_contents('https://graph.facebook.com/me?access_token=xxx');
foreach ($http_response_header as $rh) if (substr($rh, 0, 4)=='HTTP') list(,$status,)=explode(' ', $rh, 3);
if ($status==200 && $data)
    //Token is good, parse data
else
    //Token is no good

这里有很多问题…我想分享一些见解:

  1. 如果用户在浏览器的一个选项卡中注销FB,他将被注销所有选项卡

  2. 如果一个FB应用程序已经请求用户的权限,如offline_access,他们可以显示他们想要的任何相关内容,如果他们已经维护了一些FB id和他们自己的id映射。access_token必须用于获取任何信息

  3. access_token保持有效,如果你没有明确地要求一个access_token的到期日期。

  4. 如果用户更改任何FB凭据,
  5. access_token将更改。