我使用Yii作为框架,但我认为这不会发生。
此时我使用PHP SDK从用户那里获取帐户信息,这在我的用户首次登录时工作正常。但是在1或2小时后,访问令牌到期并且我得到一个错误(这并不奇怪)。
但是这里是我被卡住的地方,我可以想到2个解决方案,但我不知道如何做到这一点。首先让我介绍一下我的一些代码:
要登录我的应用,用户会收到FacebookLogin()
操作:
public function actionFacebookLogin()
{
$my_url = 'http://***.***.nl/app/facebook-popup.php';
$permissions = 'read_insights, publish_actions, manage_pages, email';
$loginUrl = Yii::app()->facebook->getLoginUrl(array('scope' => $permissions, 'display' => 'popup', 'redirect_uri' => $my_url));
echo '<script> window.location="'.$loginUrl.'"</script>';
}
在用户授予适当权限后,用户将发送到Login()
操作:
public function actionLogin() {
$facebookID = Yii::app()->facebook->getUser();
$accessToken = Yii::app()->facebook->getAccessToken();
}
(其余的登录操作并不重要。)
现在,->getAccessToken()
函数为我提供了一个生命周期短的正确access_token。这将没有问题,除非用户在我的页面上超过1或2个小时,“现在有些奇怪的东西*之后用户必须退出并再次登录。然后我仍然得到错误,除了大约10分钟后我得到一个新的access_token确实授予我所需的权限。
所以要解决这个问题我想到了2个解决方案,我无法找到合适的方法来使用它。
首先是最简单的一个。 当我转到Graph API Explorer并使用access_token我的应用程序给我获取信息,但当我尝试调试access_token时,它显示access_token有一个开始日期。但是当我使用相同的Graph API Explorer并让它自己生成一个access_token时,我得到一个根本没有过期的access_token。
根据Graph API Explorer 询问我的处理更新 我转到API资源管理器并将应用程序更改为我的webapp。然后它自动填充了一个正常的access_token。当我按下“调试”按钮时,它表示此access_token有一个开始日期。当我回到资源管理器并按下“获取访问令牌”按钮时,它会给我另一个。当我再次按下“调试”按钮时,它表示此access_token没有开始日期。如果我可以使用这个,这将是很好的。
所以我的第一个解决方案是获取最后一个access_token(如果可能)并将其存储在我的数据库中。然后在需要时使用Facebook PHP SDK ->setAccessToken()
功能。但是怎么样?我没有线索!
我想到的第二个解决方案。
我还可以创建一个init()
函数,如果我们得到一个有效的access_token,如果没有得到一个新的或者刷新当前已过期的那个,则检查每个动作。这将比第一个解决方案有更多的服务器负载,与第一个解决方案相同,我不知道如何实现这一点。
我认为主要的问题是我发现Facebook文档有点难以理解,我也不知道从哪里开始。
任何输入都会非常受欢迎!
答案 0 :(得分:0)
您可以延长访问令牌的到期时间,如下所述:https://developers.facebook.com/roadmap/offline-access-removal/
或者你可以嵌入JS SDK,如果前一个访问令牌已经过期,它将在每个页面调用中获得一个新的短暂访问令牌。 (并通过cookie与PHP SDK共享。)