首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Facebook PHP / JS Sdk此授权码已使用错误

Facebook PHP / JS Sdk此授权码已使用错误
EN

Stack Overflow用户
提问于 2014-09-27 20:00:06
回答 2查看 4.2K关注 0票数 6

我使用的是Facebook php和js sdk。

我正在用js sdk登录facebook。登录可以完美地工作。

我有php部分。

代码语言:javascript
运行
复制
private $helper, $api_id, $app_secret, $session;        

....

FacebookSession::setDefaultApplication($this->api_id, $this->app_secret);
$this->helper = new FacebookJavaScriptLoginHelper();


try {
    $this->session = $this->helper->getSession();
} catch (FacebookRequestException $ex) {
    log_message('error', 'Facebook e1 :' . $ex->getCode());
    log_message('error', 'Facebook e1 :' . $ex->getMessage());
} catch (\Exception $ex) {
    log_message('error', 'Facebook e2 :' . $ex->getCode());
    log_message('error', 'Facebook e2 :' . $ex->getMessage());
}

if ($this->session) {
    $request = (new FacebookRequest($this->session, 'GET', '/me'))->execute();
    $user = $request->getGraphObject()->asArray();
    return $user;
} else {
    return false;
}

当页面正常加载时,我可以毫无问题地获取用户数据。

但是,例如,如果我多次按f5刷新页面,我会得到错误消息“此授权码已被使用”。或“此授权码已过期。”用户数据为空。

我的想法是使用js登录,并使用php部分来验证用户是否登录到facebook。

我正在使用最新的facebook php sdk:https://github.com/facebook/facebook-php-sdk-v4

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-04-11 23:20:04

有几种方法可以解决这个问题。

1)您必须在每次调用时更新cookie中的访问令牌,FB不会自动执行此操作。因此,请确保使用status: true参数调用FB.init

代码语言:javascript
运行
复制
    FB.init({
        appId      : window.fbId,
        cookie     : true,
        status     : true,
        version    : 'v2.3'
    });

接下来,无论你是否已经连接到FB.getLoginStatus();,每次页面刷新都必须调用Facebook。

如果您的应用程序需要执行某些ajax调用,这将不起作用--原因很简单,因为执行ajax时访问令牌不会更新(除非在每次调用ajax之前都调用FB.getLoginStatus(); --这有点过分了)。

2)当用户通过FB JS SDK连接时,最好将访问令牌存储在会话中。PHP代码可能如下所示:

代码语言:javascript
运行
复制
    try {
        $fbToken = isset($_SESSION['fbToken']) ? $_SESSION['fbToken'] : NULL;
        if ($fbToken !== NULL) {
            $session = new \Facebook\FacebookSession($fbToken);
        } else {
            $helper = new FacebookJavaScriptLoginHelper();
            $session = $helper->getSession();
        }

    } catch(\Facebook\FacebookRequestException $ex) {
        log_message('error', 'Facebook e1 :' . $ex->getCode());
        log_message('error', 'Facebook e1 :' . $ex->getMessage());
    } catch(\Exception $ex) {
        log_message('error', 'Facebook e2 :' . $ex->getCode());
        log_message('error', 'Facebook e2 :' . $ex->getMessage());
    }

    if ($session) {
        $accessToken = $session->getAccessToken();
        $longLivedAccessToken = $accessToken->extend();
        $_SESSION['fbToken'] = $longLivedAccessToken;
        $request = (new FacebookRequest($session, 'GET', '/me'))->execute();
        $user = $request->getGraphObject()->asArray();
        return $user;
    } else {
        return FALSE;
    }
}

希望我能帮上忙..。干杯。

票数 3
EN

Stack Overflow用户

发布于 2016-11-03 02:15:13

删除您的浏览器历史记录,Cookie这是因为您测试了之前的会话有一些错误的值

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26074435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档