简体   繁体   English

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

[英]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. 出于某种原因,我的Facebook应用程序的随机用户将其UID返回为0.从我所知道的,它似乎不是特定的浏览器问题。

Here's how my app works. 这是我的应用程序的工作方式。 I have a homepage where a user can click and Enter Now link. 我有一个主页,用户可以点击并立即进入链接。 This button triggers the oauth(); 这个按钮触发oauth(); JS function and should pop open the OAuth login window. JS功能应该弹出OAuth登录窗口。 See my JS code below.. 请参阅下面的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

If the oauth login is successful I pop open a FancyBox iframe that has a form in it. 如果oauth登录成功,我会弹出一个包含表单的FancyBox iframe。 Here is the Facebook PHP code on the iframe page to get the UID... 这是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 ?>

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. 有些情况下,用户将使用PHP SDK完成初始身份验证过程,但无法接收访问令牌。 In this case, FacebookApiException is thrown. 在这种情况下,将抛出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;
    }
}

Reference: How to properly handle session and access token with Facebook PHP SDK 3.0? 参考: 如何使用Facebook PHP SDK 3.0正确处理会话和访问令牌?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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