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

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

  1. Keesha

    Thanks a bunch for sharing this with all of us you
    actually realize what you are talking about! Bookmarked.

    Please also seek advice from my website =). We can have
    a link exchange agreement between us

  2. maths tricks for bank exams

    Hello! This is my 1st comment here so I just wanted to
    give a quick shout out and say I really enjoy reading through your blog posts.
    Can you recommend any other blogs/websites/forums that cover
    the same subjects? Thanks a lot!

  3. Earlene

    If you’re hanging pictures that aren’t a “set” and are different
    dimensions, then here are some further tips:.

    Other digital scales offer functions like measuring body fat and
    body water percentages for a more complete picture of the health.
    I also enlightened her on the differences between digital and analog scales.

  4. Dwight

    Attractive element of content. I simply stumbled upon your web
    site and in accession capital to claim that I get actually enjoyed account your weblog posts.
    Any way I’ll be subscribing in your feeds or even I success you get right of entry to consistently quickly.

  5. Ned

    After pregnancy, women tend to weigh an average of 4.
    The problem is, more often than not, most people have read about, searched and even pondered on what they think
    or believe happiness is… It appears that many of us have pretty much accepted to some extent “
    What happiness is. Should I expect to see the measured copper content of my.

  6. Leandro

    IR night vision The door bell phone support IR night vision. Find free
    printable pumpkin carving stencils and patterns online for Halloween 2010 here.
    The expense of the wifi doorbell furthermore is dependent upon the particular certain characteristic with
    all the wi-fi doorbell since it really is different coming from 1 entrance bell about the distinct additional.

  7. Francisca

    This particular kind of doorway bell be placed by you everywhere
    of your house however whilst putting this kind of kind
    of front door bell something that you should take into consideration is basically that you
    just need to put the wifi doorbell because spot to enable
    you to definitely just hear the sound of your bell. 35K resistor across these pin-outs shunts
    the IC to the above gain. In fact, the only thing i – Books lacks
    is a big library of titles, which will come in time.

  8. weight scales

    The proposed weight loss is in the range of half a
    pound to a pound (. These bed scales allow recording the weights of the patient
    with least effort and discomfort. “Insist on quality, brand strategy is the first international background of economic globalization the only way for Chinese enterprises.

  9. home business

    Most people who go into business do so because they’re somewhat of an expert in their
    niche. Hence, it is very important to design the digital marketing concept keeping in mind these varied age groups of customers.
    You can compare the courses and training offered by these institutes and also read testimonials from previous participates who have taken training.


    A Westinghouse module that features five channels can be
    found for under $60 and includes one intercom unit.
    Find free printable pumpkin carving stencils and patterns online for Halloween 2010 here.

    Remember to keep a record of the business and the number for future reference.

  11. kocioł gazowy

    Aw, this was a very good post. Finding the time and actual effort
    to produce a good article… but what can I say… I put things off a whole lot and don’t manage to get nearly anything done.


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>