facebook->getUser() returning 0

2019-02-20 03:29发布

Whenever I try to login a prompt opens asking for the basic permissions, after that its being redirected to my redirect_uri with an URL

=">http://localhost/demo/?code=AQDwzia3Wx1BktixF59jVHbm0ViGVJm8Xhb2tNZDyYreZh0KoSJhrSsJ8Aa2KX3gocwR0XNQjQz7ZlBh26_nBi-3iOMByhVO2cxwJ8maC4IHxBacfqXjzqIyBaZQbWKUUxPI6VBrqBgFXQasj7PEtmug7lt93dK4fmMC2A4i2dUYU-gSvzn0f0ZdB3eT_aSvgR1KoLCmQgLh3xix4H05QR6LCP9nLtQC4l9rMJW83kS0PNmWq0COZYvGfuX1R7519Fn3iXRB9F0MTsK1KQ_ulpK84PUCkuMu8et88Lln0ZwuzaPo0oERelkPWYnrrTKa-5w&state=ed66ea618d8076d9e72c15d9a65a6312#=

Even though facebook->getUser() returns 0

Here is my code

<?php
require_once('php-sdk/facebook.php');
$facebook = new Facebook (array(
    'appId' => '1234',
    'secret' => '12313',
    'cookie' => true
    ));
?>

<html>
    <head> <title> Warming Up with FB API </title> </head>
    <body> <h1> Hello World </h1> </body>
</html>
<?php
$loginUrl = $facebook->getLoginUrl(array ( 
        'display' => 'popup',
        'redirect_uri' => 'http://localhost/demo'
        ));

$user = $facebook->getUser();
//echo $user. '</br>';
if ($user) {
    echo '<em>User Id: </em> '.$user;
} else {
    $loginUrl = $facebook->getLoginUrl(array ( 
        'display' => 'popup',
        'redirect_uri' => 'http://localhost/demo'
        ));
    echo '<a href = "'.$loginUrl.'">Login Here </a> ';
 }
?>

I know its a very trivial question but I am kinda stuck at this and unable to proceed further. Kindly suggest what to do.

*UPDATE*

Leaving the App Domain empty solved my problem.

5条回答
看我几分像从前
2楼-- · 2019-02-20 03:57

It might be Worked using

$opts[CURLOPT_SSL_VERIFYPEER] = false;  after $opts = self::$CURL_OPTS; on file base_facebook.php. 
查看更多
戒情不戒烟
3楼-- · 2019-02-20 04:03

Change this

$loginUrl = $facebook->getLoginUrl(array ( 
        'display' => 'popup',
        'redirect_uri' => 'http://localhost/demo'
        ));

to

$loginUrl = $facebook->getLoginUrl(array ( 
        'display' => 'popup',
        'redirect_uri' => 'http://localhost/demo/index.php'
        ));

And see if this works !!

查看更多
可以哭但决不认输i
4楼-- · 2019-02-20 04:12

After several hours, the solution for me was (Let's say my site is http://www.site123.com):

Settings @ https://developers.facebook.com

  1. App Domain: site123.com (even blank it will work though)
  2. Site URL: http://site123.com IMPORTANT : NOT http://www.site123.com

PHP Code - fb_config.php

//Declarations
$app_id     = "{you AppID}";
$app_secret = "{your App Secret}";
$site_url   = "http://site123.com/receive_data_from_facebook.php";

//New Facebook
$facebook = new Facebook(array(
'appId'     => $app_id,
'secret'    => $app_secret,
'cookie'    => TRUE, /* Optional */
'oath'      => TRUE  /* Optional */
));

//Login URL
$loginUrl = $facebook->getLoginUrl(array(
    'scope'     => 'email,user_birthday',
    'redirect_uri'  => $site_url,
    ));

//Get FacebookUserID
$fbuser = $facebook->getUser();

Important Note Also: I had some issues with Firefox $facebook->getUser() was 0 even my code was working on Chrome. But after cleaning Firefox cache, it worked nicely!

Hope it helps.

查看更多
祖国的老花朵
5楼-- · 2019-02-20 04:16

If User is logged in and still getting $user = 0 I faced this issue on different occasions but SDK issue is not happening to everyone. So I'm not sure what goes wrong here. But I dig in to it little bit and found solution as mentioned below.

SOLUTION : This worked for me after trying for many solutions for this issue.

In base_facebook.php file, find the makeRequest() method and check for following Line.

$opts = self::$CURL_OPTS; 

Immediately following it, add this line

$opts[CURLOPT_SSL_VERIFYPEER] = false;  

More details can be found here - http://net.tutsplus.com/tutorials/php/how-to-authenticate-your-users-with-facebook-connect/

查看更多
兄弟一词,经得起流年.
6楼-- · 2019-02-20 04:18

if someone is still banging their head over this here is what is wrong now. I was hired to fix this mess!

  1. Check App domain in fb panel , must match with the domain where your app is.

  2. edit base_facebook.php find:

    public function getAccessToken() {

    if ($this->accessToken !== null) {
      // we've done this already and cached it.  Just return.
      return $this->accessToken;
    }
    
    // first establish access token to be the application
    // access token, in case we navigate to the /oauth/access_token
    // endpoint, where SOME access token is required.
    $getApplicationAccessToken = $this->getApplicationAccessToken();
    $this->setAccessToken($getApplicationAccessToken);
    $user_access_token = $this->getUserAccessToken();
    if ($user_access_token) {
      $this->setAccessToken($user_access_token);
    }
    return $this->accessToken;
    

    }

to::

  public function getAccessToken() {

    if ($this->accessToken !== null) {
      // we've done this already and cached it.  Just return.
      return $this->accessToken;
    }

    // first establish access token to be the application
    // access token, in case we navigate to the /oauth/access_token
    // endpoint, where SOME access token is required.
    $getApplicationAccessToken = $this->getApplicationAccessToken();
    $this->setAccessToken($getApplicationAccessToken);
    $user_access_token = $this->getUserAccessToken();
    if ($user_access_token) {
      //$this->setAccessToken($user_access_token);
    $this->accessToken = $user_access_token; //edit; msolution
    }
    return $this->accessToken;
  }
  1. Next find the function: getAccessTokenFromCode()

find the line:

parse_str($access_token_response, $response_params); 

replace it with:

//parse_str($access_token_response, $response_params); //edit:: msolution;;
$response_params = json_decode($access_token_response, true );

commenting the original and adding json_decode

thats it!

查看更多
登录 后发表回答