首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >facebook OAuthException:必须使用活动访问令牌查询有关当前用户的信息。

问facebook OAuthException:必须使用活动访问令牌查询有关当前用户的信息。
EN

Stack Overflow用户
提问于 2012-09-28 10:47:26
回答 1查看 9.6K关注 0票数 2

可能重复的facebook Uncaught OAuthException: An active access token must be used to query information about the current user

但我没有找到合适的解决办法。

我正在使用facebook和代码点火器,它正在正常工作。但有时它会引发异常OAuthException:必须使用活动访问令牌来查询有关当前用户的信息。

以下是Controller文件的代码

代码语言:javascript
复制
$config = array(
                    'appId'  => 'XXXXXXX',
                    'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXX',
                    'fileUpload' => true,
              );

$this->load->library('facebook/Facebook', $config);

$fbme = null;

$user = $this->facebook->getUser();

if ($user) {
    try {               
        $fbme = $this->facebook->api('/me');
    } catch (FacebookApiException $e) {
          error_log($e);
          $user = null;
    }
}

//if user is logged in and session is valid.
if ($fbme){
              //do some stuff...
              //redirecting to user home page (my site's)
    }

在视图文件中,我使用js。视图文件的代码是

代码语言:javascript
复制
<div id="fb-root"></div>
    <script type="text/javascript">
        var button2;

        window.fbAsyncInit = function() {
            FB.init({ appId: 'XXXXXXXX',
                status: true,
                cookie: true,
                xfbml: true,
                oauth: true});

           function updateButton(response) {
                button1 = document.getElementById('fb-login'); //login button
                button2 = document.getElementById('fb-logout'); //logout button
                if (response.authResponse) {
                    //user is already logged in and connected
                                button2.onclick = function() {
                                    FB.logout(function(response) {});
                                };
            } else {
                    //user is not connected to your app or logged out
                    button1.onclick = function() {
                        FB.login(function(response) {
                            if (response.authResponse) {
                            } else {
                                //user cancelled login or did not grant authorization
                            }
                        }, {scope:'email,user_birthday,user_about_me,user_likes,user_interests,user_education_history,user_work_history'});
                    }
                }
            }

            // run once with current status and whenever the status changes
            FB.getLoginStatus(updateButton);
            FB.Event.subscribe('auth.login', function(response) {
                window.location.reload();
            });
            FB.Event.subscribe('auth.logout', function(response) {
                window.location.reload();
            });
        };
        (function() {
            var e = document.createElement('script'); e.async = true;
            e.src = document.location.protocol
                + '//connect.facebook.net/en_US/all.js';
            document.getElementById('fb-root').appendChild(e);
        }());       
    </script>

问题:

有时,它抛出"OAuthException:一个活动访问令牌必须用于查询有关当前用户的信息。“到错误日志文件。

案例:用户登录到facebook,并且已经验证了我的应用程序,如果用户登录了facebook并验证了我的应用程序,并尝试登录到我的站点,而是将用户重定向到我的站点(php在本例中不起作用),它正在加载视图文件。在查看文件时,我也在检查用户是否登录到facebook。(考虑到)如果用户登录,它将重新加载页面,相同的控制器脚本将运行,并将用户重定向到用户的主页(php在这种情况下正在工作)。

但第一次它就不起作用了。不知道我在哪里犯了这个错误。

此外,注销按钮(在视图文件中)有时也不起作用。这意味着点击它并不是从facebook上注销用户。(这只发生在我同事的浏览器中。她正在使用windows 7中的铬)

EN

回答 1

Stack Overflow用户

发布于 2012-12-10 02:11:44

我在一起使用PHP+JS时遇到了类似的问题。我暂时通过删除FB.init "cookie:true"选项来解决这个问题。

由于无法找到的原因,PHP和JS之间共享了一个无效的signedRequest cookie,然后,PHP会话的有效access_token被一个无效的access_token覆盖,从而破坏了以前有效的access_token令牌。

我的问题与您的问题之间的区别在于,您正在通过JS登录,并试图访问PHP上的同一个会话(我向后执行,登录PHP并尝试使用JS)。

这个错误显然是修复在这个拉请求:https://github.com/facebook/facebook-php-sdk/pull/48

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

https://stackoverflow.com/questions/12638543

复制
相关文章

相似问题

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