Using Facebook PHP SDK 3 with CodeIgniter 2.1

To access the Facebook API, there exists the Facebook PHP SDK to simplify the process. I needed Facebook OAuth in one of my projects using CodeIgniter but had some hard time trying to get it done. I faced a lot of errors, the main one though was that: getUser always returns 0. I found out that this is pretty much popular on stackoverflow and other websites – each proposing different solution. In this post, I try to organize all the steps and collect them in one place. References and downloads are provided at the end of the post.

Facebook App

  1. Before starting, make sure you create a new App.
  2. Get the APP ID and APP Secret.
  3. After creating your App, click Edit Settings or Edit App.
  4. In the basic info, add your domain name in the App domain.
  5. In the “select how your app integrates with Facebook” click on website and add the same domain you added in step 4 but with http:// as prefix.
  6. If you want to test locally, try creating a Virtual Host.


  1. Download the Facebook PHP SDK.
  2. Download CodeIgniter.
  3. Extract CodeIgniter.
  4. Extract the Facebook SDK and
    1. Rename facebook.php to Facebook.php
    2. add the following at the beginning of the Facebook.php file right after the php opening tag.
      if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    3. Copy the 3 files in the Facebook SDK extracted directory to application/libraries in CodeIgniter.
  5. In CodeIgniter, create a file facebook.php in application/config directory with the following content (make sure to add your application Id and secret key of the Facebook app):
     $config['appId'] = 'YOUR APP ID';
     $config['secret'] = 'YOUR SECRET KEY';
  6. Open your application/config/config.php file and make sure $config['allow_get_array'] is set to true.

Using OAuth

In OAuth, the procedure is the following:

  1. The user clicks on a sign in link on your website.
  2. User is redirected to Facebook, enter his credentials, authorize your app.
  3. Facebook then redirects the user back to your application with data.

Create a controller, say Main Controller. In your controller’s constructor add the following code:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Main extends CI_Controller {

	public function Main(){
		parse_str( $_SERVER['QUERY_STRING'], $_REQUEST );
		$CI = & get_instance();
$config = $CI->config->item('facebook');
$this->load->library('Facebook', $config);

	function index(){
		// Try to get the user's id on Facebook
		$userId = $this->facebook->getUser();

		// If user is not yet authenticated, the id will be zero
		if($userId == 0){
			// Generate a login url
			$data['url'] = $this->facebook->getLoginUrl(array('scope'=>'email'));
			$this->load->view('main_index', $data);
		} else {
			// Get user's data and print it
			$user = $this->facebook->api('/me');



Create a view, called main_index.php in your views directory.

<a href="<?php echo $url; ?>">Click here to login</a>

In the constructor, the parse_str function is called to copy the variables sent by Facebook to the $_REQUEST var so that the Facebook SDK can do its checks. This step is required because CodeIgniter has its own special input class that manipulates $_GET, $_POST, $_COOKIE, and so on. After that, the Facebook configuration is loaded and used to initialize the Facebook SDK (or we can call it the Facebook library by now).

In the index function, we first check whether the user is already authenticated by trying to get his user id. If the id is zero, that means he is not authenticated and we need to authenticate. This is done by generating a link, getLoginUrl(), and passing it to the view so that the user clicks and authenticate. The array passed to the getLoginUrl() specifies the scope. By default, the getLoginUrl() will cause the user to authenticate our application to get only his basic information. In this example, I assume we want his email as well and therefore I pass it as scope to the getLoginUrl() function.

If the user is authenticated, we get the user’s data and print it. You can read more about that here.


Here is the application folder with everything in this post. Click here to download it.


Use GA28994OFF As Coupon while registering to to get 9.94 OFF =D

Liked it? share it.FacebookLinkedInTwitterGoogle+Email

180 thoughts on “Using Facebook PHP SDK 3 with CodeIgniter 2.1

  1. bathroom scale

    This feature definitely comes in handy especially if
    you are trying to trim down your weight. But just as one
    day, as we suddenly realize that we weigh pounds more than we want to, we may realize that a stumble or uneven pavement causes a fall that we would have avoided in the past.
    A birthday card that arrives on time or early says “I cared enough” much more than a belated card.

  2. wireless doorbells

    Delco will testify as the lawyer’s forensic expert for Finley.
    Door – Bot is an interesting concept from BOT Home Automation.
    Seal the gaps with the help of a trim molding and you are now ready to enjoy the benefits of your system.

  3. Kim

    In your area, the temperatures may not be as low as to make the lily bulb “go to sleep”
    naturally and vernalize, cooling period which prompts the lily plant to bloom again. Supreme Commander can be a very, very
    good game – but only under controlled circumstances. A birthday card that arrives on time or
    early says “I cared enough” much more than a belated card.

  4. Keesha

    Delco will testify as the lawyer’s forensic expert
    for Finley. One of the advantages of wireless doorbells is that the end unit with the bell or chimes
    unit can be left mobile and taken from room to room, even into the garden; such is the ease of mobility, without being tied down literally to a set of cables and wires.
    All the products on the site come with a manufacturer’s warranty and a 30 day money back
    offer, so if you do not like the doorbell that
    you buy, you can simply return it and get your money back, no questions asked.

  5. Camilla

    The prospective Internet marketer now has to choose from an abundance of sites that present
    questionable guarantees at best. Although social media marketing has become extremely popular in today’s day and age, there are
    still many businesses that haven’t figured out how to do it right.
    Basically PLR stands for Private Label Rights and it is
    pre-written or pre-made content that you can use to promote your business in many different ways.

  6. Gear Peers

    The security companies therefore must ensure the most appropriate and durable equipment, installations, and maintenance programs to ensure a safe and secure existence within our society.
    The foremost piece of equipment available to the hunter for year round scouting is
    a wildgame camera. I’m also starting to discover and enjoy playing with the i – Phone camera a lot
    more because of that.

  7. sign up for uber

    Colorful, well-read and dressed, entertaining and informative,
    George offers his fares much more than most drivers. You
    should realize that the more you drive your car
    the more damage is caused to your car tires but if you do
    not use your car too much and keep it parked even then the rubber of the
    tires starts getting damaged. With like-minded entrepreneurs who strive
    for their own personal success, All – State maintains a higher level of reliability and safety unmatched by their competitors.

  8. Dennis

    Your style is really unique compared to other folks I have read stuff from.

    Thanks for posting when you’ve got the opportunity, Guess I will just book mark this site.

  9. Alissa

    This entails plumbing work, fixing electrical fittings, and providing various accessories
    for maximum pleasure and comfort. When deciding upon a scale, you should make sure that the platform is big enough for your needs.
    Folks of all ages are finally realizing that in order for
    them to take the next step forward in having a good life requires their taking responsibility
    for how they feel.

  10. wireless doorbell

    Delco will testify as the lawyer’s forensic
    expert for Finley. The power unit will simply plug into a
    standard wall socket and no further installation will be needed.
    Make sure your kids know the rules about what to
    do when the doorbell rings.

  11. Willian

    A unique code prevents nearby intercom systems from accessing the system.

    The next room is an area where Rapunzel paints all her murals.

    Seal the gaps with the help of a trim molding and you are now ready to enjoy the
    benefits of your system.

  12. renting apartments in belgrade

    However, despite of the falling mortgage rates, many are still unable to purchase a home.
    A medium-class condo with Wi-Fi, 1 washroom and a spacious kitchen, measuring 1250 square feet goes for an average price of $1500 month.
    Check out if the rental can satisfy all that you want.


    You might even look forward to those door-to-door solicitors with the Swann MP3 DJ Doorbell ($49.

    It’s easy to tell some apps were rushed out the door in order to arrive on day one.
    After setting up this type of system, each door will have its own transmitter, resulting in a
    different ringtone.

  14. Ava

    You have nothing to worry about your own confused strategies for fat loss and you’re fully protected under competent trainers.
    Lower yourself down to the point where you feel comfortable, then raise yourself back up to the starting
    position. In the least expensive class you have canvases of
    high concentration polymers.

  15. Tangela

    If some one desires to be updated with most up-to-date technologies afterward
    he must be pay a quick visit this web site and be up to date everyday.

  16. June

    A typical bathroom weight scale may deliver inaccurate guidance given that
    an individual can be slightly obese and nonetheless regarded as
    in good health. This will help eliminate the unconscious snacking that is so much a
    part of being overweight. A birthday card that arrives on time or early says
    “I cared enough” much more than a belated card.


Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>