是否可以使facebook访问令牌无效?
由于最近对offline_access的弃用,我需要这样做。
问题是令牌无法延长超过60天。即使用户返回应用程序(除非我误解了?)
所以,我想要做的是使令牌无效,然后立即将用户重新登录,以便我可以获得新的访问令牌,新的60天到期日期。只要用户每两个月来一次,一切都应该没问题。
我不想将用户从Facebook注销,因此FB.logout不可用。
这可能吗?
答案 0 :(得分:3)
你可以向/me/permissions
发送一个DELETE请求,这应该(我认为)会使用户的会话无效。
但是,我真的不明白你为什么要那样做。 您可以使用服务器端身份验证,最终使用60天令牌,无论您之前拥有什么令牌。 因此,每次您需要60天时,只需使用服务器端进程对用户进行身份验证。
答案 1 :(得分:2)
我会认真考虑避免像瘟疫这样的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开关的工作方式类似于具有多个答案的单个if
语句(大小写)。
我建议代码速度优化重新排序交换机,以便在交换机顶部列出最常见的错误,因为PHP交换机的工作方式是在列表中运行,直到找到与错误代码匹配的大小写。< / p>
答案 2 :(得分:1)
根据Facebook documentation,你不需要做任何复杂的事情。
在用户登录过程中,检索一个短期访问令牌并将其交换为长期访问令牌,该令牌有效期为60天。
如果用户在白天注销并多次登录,他将收到相同的访问令牌(可能),但过期时间不会更新。但在至少一天通过后,您将收到一个新的长期访问令牌,其中包含新的到期时间。
唯一可能的问题是用户经常登录超过两个月(超过60天)的情况。对于这样的场景(即使这几乎不可能),我编写了一个超时函数,当令牌到期时,它会在后台更新它。
我重构了我的代码,以便在昨天下午检索并使用长期令牌,因此没有足够的时间来确定,但根据提到的Facebook文档,它应该是这样的。
答案 3 :(得分:0)
您无需使访问令牌无效。
如果您使用新短期访问令牌进行交换,它将返回一个新的60天延长令牌。当用户再次使用该应用程序时,将始终为您提供该特定的短期令牌。使用客户端身份验证流程(JS SDK),因此您确定获得了短期令牌。使用新端点来替换令牌。
有关详细信息,请查看facebook doc。