简体   繁体   中英

Facebook PHP SDK - User not authenticated

I am using Facebook PHP SDK to authenticate the user. After generating the LoginUrl using the PHP SDK, the user clicking on that LoginUrl gets redirected to the Facebook page asking for permission. After clicking on the Go to App link, the user gets redirected back to my website http://www.mydomain.com/login/facebook_connect .

Problem: After being 'authenticated' by Facebook, the PHP script at http://www.mydomain.com/login/facebook_connect is unable to determine that the user has logged in via Facebook. At this point, $user = $facebook->getUser(); is 0.

Did I do something wrong? Thanks!

PHP Code for page that generates LoginUrl

require 'libs/fb-php-sdk/facebook.php';

// Create our Application instance
$facebook = new Facebook(array(
  'appId'  => '123',
  'secret' => '123'
));

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

// Get Login URL
$loginUrl = $facebook->getLoginUrl(array(
    "scope" => "email,user_education_history,user_work_history",
    "redirect_uri" => "http://www.mydomain.com/login/facebook_connect/"
));

$data['fb_login_url'] = $loginUrl;

$this->load->view('splash', $data);

PHP Code for page user is redirected to after Facebook authentication

*http://www.mydomain.com/login/facebook_connect/*

require 'libs/fb-php-sdk/facebook.php';

    $facebook = new Facebook(array(
        'appId'  => '123',
        'secret' => '123',
    ));

    // See if there is a user from a cookie
    $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;
      }
    }

    print_r($user_profile);
    echo $user;

All seems correct.

Questions:
1.- I supposed that http://www.mydomain.com/ contains all your scripts, right?
2.- Are you using codeigniter? Or a codeigniter-based CMS? In that case maybe you have a session problem (very common in CI). Check it and we continue...


EDIT 2: In case of being a cookie related problem. Here is an image showing as you can use firebug with a cookie module to easily track your cookies:

在此输入图像描述

So you can check how facebook cookies are being generated.


EDIT 3: Ok. So you are using CI and your FB cookies are being deleted. Maybe is a session problem. Here is a related answer where I explain how to use a session CI library replacement that generally solve all these kind of painful issues. Believe me, give it a try!

a.- Here it is: Codeigniter's Native session (there is a download link at the bottom)

b.- BUT, due that it is an old library you MUST made some hacks. You can check those simple hacks in the library's forum

c.- Just drop this file in codeigniter's library directory.

$facebook->getUser() uses a cookie to get the user. If you use CodeIgniter, or another library that "eats" cookies that PHP assigns automatically, you need to create a proxy page outside CI, that would pick up the cookie the redirect back into CI.

In other words, take to code you currently have in

http://www.mydomain.com/login/facebook_connect/

and create a copy in a regular PHP file:

http://www.mydomain.com/facebook_pickup.php

do not echo anything from the script (remove print_r), just redirect to

http://www.mydomain.com/login/facebook_connect/

and it would magically start working.

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