是否可以使 facebook 访问令牌无效?
由于最近弃用了offline_access,我需要这样做。
问题是令牌不能延长超过 60 天。即使用户返回应用程序(除非我误解?)
所以,我想做的是使令牌无效,然后立即重新登录用户,以便我可以取回一个新的访问令牌,新的 60 天到期日。只要用户每两个月来一次,一切都应该没问题。
我不想让用户退出 Facebook,所以 FB.logout 不可用。
那可能吗?
是否可以使 facebook 访问令牌无效?
由于最近弃用了offline_access,我需要这样做。
问题是令牌不能延长超过 60 天。即使用户返回应用程序(除非我误解?)
所以,我想做的是使令牌无效,然后立即重新登录用户,以便我可以取回一个新的访问令牌,新的 60 天到期日。只要用户每两个月来一次,一切都应该没问题。
我不想让用户退出 Facebook,所以 FB.logout 不可用。
那可能吗?
您可以发送一个 DELETE 请求/me/permissions
,应该(我认为)使用户的会话无效。
但是,我真的不明白你为什么要这样做。无论您之前拥有什么令牌,您都可以只使用最终获得 60 天令牌的服务器端身份验证。因此,每次您想要多 60 天时,只需使用服务器端进程对用户进行身份验证。
我会认真考虑避免像瘟疫那样使用 Facebook Javascript SDK,因为它是异步的,这实际上意味着 Facebook 是安全的,但您的网站却不是。
我刚刚开始重建我的登录流程,我想知道我的这部分代码是否可以方便地管理用户令牌:
if ($user) {
try {
// Proceed knowing you have a logged in user who's authenticated.
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
$fb_error = $e->getResult();
error_log($e);
$user = null;
}
}
//https://developers.facebook.com/docs/reference/api/errors/
switch ($fb_error['error']['error_subcode']) {
case '458':
//Returned on app trying something or user attempting an action after app deauth
//Can do database cleannup operations from this
$fb_error = '458 - User removed the app from user settings';
break;
case '460':
//App is no longer reauthorized and the user is trying something ?
//Stop user from all activities if this comes up as they may deauth then try perform an action
$fb_error = '460 - User needs to reauthorize';
break;
case '463':
//Expired Token
//This is where we autolog the user back in
$fb_error = '463 - Token has expired and a new one needs to be requested';
//need to somehow get the login request code from another page to hide it
//or use htaccess tricks
$facebook->getAccessToken();
break;
case '467':
//Invalid Token
//This is where we autolog the user back in
$fb_error = '467 - Token is invalid and a new one needs to be requested';
break;
}
您可以将错误输出到页面进行测试:
echo 'Error Subcode: '.$fb_error.'<br/>';
echo 'Facebook Error Dump:<br/>';
var_dump($e);
请注意,PHP switch 的工作方式类似于if
具有多个答案(案例)的单个语句。
我建议代码速度优化重新排序开关以在开关顶部列出最常见的错误,因为 PHP 开关的工作方式是向下运行列表,直到找到与错误代码匹配的大小写。
根据 Facebook文档,您不需要做任何复杂的事情。
在用户登录过程中,取回一个短寿命的访问令牌,换成一个有效期为60天的长寿命访问令牌。
如果用户在一天中多次注销并登录,他将收到相同的访问令牌(可能),但到期时间不会更新。但至少经过一天后,您将收到一个具有新到期时间的新的长寿命访问令牌。
唯一可能的问题是用户持续登录超过两个月(超过 60 天)的情况。对于这种情况(即使这几乎不可能),我编写了一个小超时函数,当令牌过期时,它会在后台更新它。
我昨天下午重构了我的代码以检索和使用长期存在的令牌,所以没有足够的时间来确定,但根据提到的 Facebook 文档,它应该是这样的。
您不需要使访问令牌无效。
如果您使用新的短期访问令牌进行交换,它将返回一个新的延长 60 天令牌。当用户再次使用该应用程序时,该特定的短期令牌始终会提供给您。使用客户端身份验证流程(JS SDK),这样您就可以确定您获得了短期令牌。使用新端点交换令牌。
有关更多信息,请查看facebook 文档。