Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook PHP SDK:$Facebook->;getUser()有时返回0_Php_Javascript_Facebook_Facebook Graph Api_Facebook Authentication - Fatal编程技术网

Facebook PHP SDK:$Facebook->;getUser()有时返回0

Facebook PHP SDK:$Facebook->;getUser()有时返回0,php,javascript,facebook,facebook-graph-api,facebook-authentication,Php,Javascript,Facebook,Facebook Graph Api,Facebook Authentication,这对我来说是一个非常令人沮丧的问题,因为我无法重现这个问题,我也没有什么可以测试的。出于某种原因,我的Facebook应用程序的随机用户的UID将返回为0。据我所知,这似乎不是一个特定的浏览器问题 下面是我的应用程序的工作原理。我有一个主页,用户可以点击并进入现在的链接。此按钮触发oauth()JS函数,并应弹出OAuth登录窗口。请参阅下面我的JS代码 window.fbAsyncInit = function() { FB.init({ appId : 'xxxxxxxxxxx

这对我来说是一个非常令人沮丧的问题,因为我无法重现这个问题,我也没有什么可以测试的。出于某种原因,我的Facebook应用程序的随机用户的UID将返回为0。据我所知,这似乎不是一个特定的浏览器问题

下面是我的应用程序的工作原理。我有一个主页,用户可以点击并进入现在的链接。此按钮触发
oauth()JS函数,并应弹出OAuth登录窗口。请参阅下面我的JS代码

window.fbAsyncInit = function() {
FB.init({
  appId      : 'xxxxxxxxxxxxx', // App ID
  channelUrl : '//channel.html', // Channel File
  status     : true, // check login status
  cookie     : true, // enable cookies to allow the server to access the session
  xfbml      : true  // parse XFBML
});


FB.Canvas.scrollTo(0,0); //makes window scroll to top when loading page within iframe
FB.Canvas.setAutoGrow(); //resize the height of the iframe automatically
};

// Load the SDK Asynchronously
(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));

function oauth() {   
   FB.login(function(response) {
   if (response.authResponse) {
     console.log('Welcome!  Fetching your information.... ');

     FB.api('/me', function(response) {
       console.log('Good to see you, ' + response.name + '.');
       //window.location.reload();
       //alert("bing bong bing");
       $.fancybox.open("#entry-form", {
           width: 645,
           minHeight: 920,
           padding: 0,
           scrolling: 'no',
           wrapCSS: 'enternow-form',
           type: 'iframe',
           href: 'upload',
           helpers : {
               overlay : {
                   opacity: 0.95,
                   css : {
                   'background-color' : '#fff'
                    }
    }
}              
       });
     });
   } else {
     console.log('User cancelled login or did not fully authorize.');
   }
 });
}//end oauth function
如果oauth登录成功,我会弹出一个带有表单的FancyBox iframe。以下是iframe页面上的Facebook PHP代码,用于获取UID

<?php header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); ?>
<?php session_start(); ?>
<?php require_once("../src/facebook.php"); ?>
<?php
$config = array();
$config["appId"] = 'xxxxxxxxxxxxxx';
$config["secret"] = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$config["fileUpload"] = false; // optional

$facebook = new Facebook($config);

// get signed request to help determine if user is an admin
$signedRequest = $facebook->getSignedRequest();

// Get User ID
$user = $facebook->getUser();

// We may or may not have this data based on whether the user is logged in.
//
// If we have a $user id here, it means we know the user is logged into
// Facebook, but we don't know if the access token is valid. An access
// token is invalid if the user logged out of Facebook.

if ($user) {
 try {
// Proceed knowing you have a logged in user who's authenticated.
$user_profile = $facebook->api('/me');
 } catch (FacebookApiException $e) {
error_log($e);
$user = null;
 }
}

// Login or logout url will be needed depending on current user state.
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$loginUrl = $facebook->getLoginUrl();
}
?>

<?php echo $user //this is the user's ID ?>


在某些情况下,您很可能没有成功地对用户进行身份验证。有时,用户将使用PHP SDK完成初始身份验证过程,但无法收到访问令牌。在这种情况下,将抛出
FacebookApiException

if ($user) {
    try {
        // Proceed knowing you have a logged in user who's authenticated.
        $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
    }
}
参考资料: