Facebook login working with CodeIgniter Ion Auth
- Copy
config/facebook_ion_auth.phptoapplication/config/facebook_ion_auth.php. - Copy
libraries/Facebook_ion_auth.phptoapplication/libraries/Facebook_ion_auth.php. - Configure your Facebook API settings in
application/config/facebook_ion_auth.phpforapp_id- Your app idapp_scret- Your app secret keyscope- custom permissions check - http://developers.facebook.com/docs/reference/login/#permissionsfields- fields to retrieve from Facebook; if set to'', default isid,first_name,last_name; See https://developers.facebook.com/docs/graph-api/reference/userredirect_uri- url to redirect back from facebook. If set to'',site_url('')will be used
Assuming that you have installed CodeIgniter Ion Auth, add this in application/config/autoload.php.
$autoload['libraries'] = array('ion_auth', 'Facebook_ion_auth');
Create application/core/MY_AuthController.php and put this code into the file
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* AuthController
*/
class MY_AuthController extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->config('ion_auth', true);
if (uri_string() != 'auth/login') {
$this->_is_login();
}
}
private function _is_login()
{
if (!$this->ion_auth->logged_in()) {
redirect('auth/login');
}
}
}
To auto-load all files in application/core/, add this code in application/config/config.php.
/**
| -------------------------------------------------------------------
| Native Auto-load
| -------------------------------------------------------------------
|
| Nothing to do with config/autoload.php, this allows PHP autoload to work
| for base controllers and some third-party libraries.
|
*/
function __autoload($class)
{
if(strpos($class, 'CI_') !== 0) {
require(APPPATH . 'core/'. $class . '.php');
}
}
Extends the default controller application/controllers/Welcome.php to MY_AuthController.php for authentication check.
class Welcome extends MY_AuthController {
// ....
}
Create a new controller file application/controllers/Facebook_login.php with the following code:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Facebook_login extends CI_Controller
{
/**
* Index Page for this controller.
* You will be redirected to the facebook login page
*/
function index()
{
$this->facebook_ion_auth->login();
}
/**
* Controller that is redirected back from facebook after login
*/
public function action()
{
$code = $this->input->get('code');
if ($code) {
$this->facebook_ion_auth->login();
redirect('/');
} else {
redirect('auth/login');
}
}
}
In application/views/auth/login.php, add "Login with Facebook" button using the Facebook_login controller created above.
<a href="<?php echo site_url('facebook_login'); ?>">Login with Facebook</a>
Update application/config/facebook_ion_auth.php for redirect_uri.
$config['redirect_uri'] = site_url('facebook_login/action'); // url to redirect back from facebook.
Then, when you access your application in the browser, you will see the login form with facebook login button.