修订问题
我意识到使用对的响应:$facebook->api('/me?access_token='.$access_token)
将确定您是否需要新的访问令牌。所以我下面的问题可以简化为:
如果用户没有取消对应用程序的授权,是否有FB批准的方法可以在不重定向到授权日志的情况下获得新的访问令牌?
旧问题
正如在这个问题中指出的,Facebook(离线)访问令牌由于各种原因而过期。此解决方案由Facebook提供,用于重新授权和获取新的离线访问令牌。
然而,该解决方案假设我想要以下行为:
- 将我的用户重定向到身份验证对话框
- 如果他们没有取消对我的应用程序的授权,我会自动获得一个新的访问令牌
- 如果他们取消了我的应用程序的授权,他们将获得一个重新授权的授权对话框
然而,
- 如果用户没有取消对我的应用程序的授权,我想要一个新的访问令牌
- 如果用户有,我不希望有身份验证对话框(也不希望有新的访问令牌)
- 理想情况下,这可以在PHP中完成,而无需重定向到身份验证对话框
如果您的应用程序得到了用户的授权,您可以使用以下javascript获得新的访问令牌:
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
user_id = response.authResponse.userID;
access_token = response.authResponse.accessToken;
}
}
这不会提示用户重定向到身份验证日志。Facebook的getLoginStatus
中记录的简单内容。
这当然是行不通的,除非用户登录了Facebook,授权了你的应用程序,并访问了你的页面(就我而言,这个假设是可以的)。当然,您可以请求offline_access
权限并存储新的访问密钥以供以后使用。
我的问题说,理想情况下,这将由服务器端处理。不幸的是,这个php:的行为
$access_token = $facebook->getAccessToken();
与Javascript SDK生成的访问令牌响应不同。请参阅此问题。