【发布时间】:2013-02-12 12:07:34
【问题描述】:
我使用 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,如果没有获得新的 access_token 或刷新当前过期的操作。这将比第一个解决方案有更多的服务器负载,并且与第一个解决方案相同,我不知道如何实现这一点。
我认为主要问题是我发现 Facebook 文档有点难以理解,而且我不知道从哪里开始。
任何输入都会非常受欢迎!
【问题讨论】:
-
这一段“第一个最简单的......”令人困惑。这里显然有两个不同的调用。您需要明确说明您在 Graph Explorer 中为每个项目所做的工作。
-
编辑了我的帖子,感谢您的反馈。希望这足够清楚。
标签: php facebook facebook-php-sdk facebook-apps facebook-access-token