简体   繁体   中英

Facebook PHP SDK: $facebook->getUser() sometimes returning 0

This is a very frustrating problem for me as I am unable to recreate the problem and I have nothing to test off of. For some reason random users of my Facebook app will have their UID returned as 0. It doesn't appear to be a specific browser issue from what I can tell.

Here's how my app works. I have a homepage where a user can click and Enter Now link. This button triggers the oauth(); JS function and should pop open the OAuth login window. See my JS code below..

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

If the oauth login is successful I pop open a FancyBox iframe that has a form in it. Here is the Facebook PHP code on the iframe page to get the 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 ?>

Most likely, you have not successfully authenticated the user in certain circumstances. There are occassions where the user will go through the initial authentication process with the PHP SDK but fail to receive an access token. In this case, FacebookApiException is thrown.

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;
    }
}

Reference: How to properly handle session and access token with Facebook PHP SDK 3.0?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM