我使用 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 Explorer 并将应用程序更改为我的 webapp。然后它自动填写了一个正常的access_token。当我按下“调试”按钮时,它说这个 access_token 有一个有效期。然后当我返回资源管理器并按下“获取访问令牌”按钮时,它会给我另一个。当我再次按下“调试”按钮时,它说这个 access_token 没有有效期。如果我能用这个就好了。
所以我的第一个解决方案是获取最后一个 access_token(如果可能)并将其存储在我的数据库中。然后在需要时使用 Facebook PHP SDK->setAccessToken()
功能。但是怎么办??我一点头绪都没有!
我想到的第二个解决方案。init()
如果我们得到一个有效的 access_token 并且如果没有得到一个新的或刷新当前过期的,我还可以创建一个函数来检查每个操作。这将比第一个解决方案有更多的服务器负载,并且与第一个解决方案相同,我不知道如何实现这一点。
我认为主要问题是我发现 Facebook 文档有点难以理解,而且我不知道从哪里开始。
任何输入都会非常受欢迎!