0

我使用 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 文档有点难以理解,而且我不知道从哪里开始。

任何输入都会非常受欢迎!

4

1 回答 1

0

您可以延长访问令牌的到期时间,如下所述:https ://developers.facebook.com/roadmap/offline-access-removal/

或者您可以嵌入 JS SDK,如果前一个已过期,则在每个页面调用上都会获得一个新的短期访问令牌。(并通过 cookie 与 PHP SDK 共享。)

于 2013-02-12T12:29:52.193 回答