【问题标题】:Facebook apps, Uncaught OAuthException on Internet ExplorerFacebook 应用程序,Internet Explorer 上未捕获的 OAuthException
【发布时间】:2014-07-30 01:06:35
【问题描述】:

我在 Internet Explorer 上使用 Facebook 应用时遇到问题。在其他浏览器上它可以正常工作,但在 IE 上我得到错误:

致命错误:未捕获的 OAuthException:必须使用活动访问令牌来查询有关当前用户的信息。在第 1340 行的 /base_facebook.php 中抛出

我发现与此错误有关。它在我的代码中

$userinfo = $facebook->api('/me');

雇用是我的代码:

<?php
session_start();
header('Content-Type: text/html; charset=UTF-8');
require 'facebook.php';

// APPS INICIALIZATION
$appid = '123APPID123';
$facebook = new Facebook(array(
  'appId'  => $appid,
  'secret' => '123SECRETID123',
  'cookie' => true,
));
// END - APPS INICIALIZATION

?>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/0.10.0/lodash.min.js"></script>
<meta http-equiv="X-UA-Compatible" content="IE=7" />
<script src="https://connect.facebook.net/en_US/all.js"></script>
<div id="fb-root"></div>
<script>
    window.fbAsyncInit = function() {
        FB.init({
              appId      : '123APPID123', // App ID
              status     : true, // check login status
              cookie     : true, // enable cookies to allow the server to access the session
              xfbml      : true  // parse XFBML
        });
    };

    (function(d){
        var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
        if (d.getElementById(id)) {return;}
        js = d.createElement('script'); js.id = id; js.async = true;
        js.src = "//connect.facebook.net/en_US/all.js";
        ref.parentNode.insertBefore(js, ref);
    }(document));

</script>
<br>

<?php 

// RETRIVAL DATA AND OTHERS INFO
$userid = $facebook->getUser();
$userinfo = $facebook->api('/me');
// END - RETRIVAL DATA AND OTHERS INFO

// PUT DATA TO VARIABLE
$email = $userinfo['email'];
$first_name = $userinfo['first_name'];
$last_name = $userinfo['last_name'];

// DATA TESTER //
echo $email.'<br>';
echo $first_name.'<br>';
echo $last_name.'<br>';
?>

你有什么想法吗?

【问题讨论】:

  • 如何登录用户?我假设您的代码中 $userid 为 0?
  • 这是 Facebook 上的应用程序。第一个 php 脚本检查:你喜欢这个页面并且你正在登录,这是第二个脚本 - 只显示折扣并将用户信息放入数据库。
  • 您需要用户的访问令牌才能以该用户的身份执行请求。如果您使用 user_likes 进行点赞,则 Facebook 不会批准
  • 但是我从我的用户那里获得了这个 access_token,但在 Internet Explorer 上没有 ;-) 我为这个 $access_token 做了回显,在所有浏览器上我看到了普通的令牌密钥,但是在 IE 上我看到了 APP_ID|APP_SECRET而不是普通的访问令牌。我认为这是这个问题的关键。这部分在所有浏览器上都可以正常工作(IE 也是)。问题只是获取用户数据。
  • 如果该应用是在 2014 年 4 月 30 日之后创建的,Facebook 必须先审查您对 user_likes 的使用,然后您才能询问在该应用上没有角色的用户。如果您将其用于类似门控,他们将不会批准它

标签: javascript php facebook internet-explorer


【解决方案1】:

适用于对 IE 和 facebook 授权有相同问题的每个人。问题与 $facebook->api('/me'); 无关或 $facebook->getUser(); .您可以通过使用来检查它:

print_r($facebook->getUser());

如果您的回答为 0,则意味着 IE 不会将所有 cookie 发送到您的 PHP 脚本。你应该在启动 php 文件后用这一行开始你的 PHP 代码:

header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');

现在 IE 发送所有 cookie 没有任何问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 2012-07-11
    • 1970-01-01
    相关资源
    最近更新 更多