Saturday, June 4, 2016

Simple Facebook Login With CodeIgniter

Happy Sharing...

Facebook login sekarang sudah marak digunakan di berbagai aplikasi karena memudahkan pengunjung untuk melakukan sign in ke aplikasi.
Pada tutor ini, kita akan membuat form login facebook yang sangat sederhana, data yang akan kita ambil dari facebook antara lain Id, User Fullname, Email Address, Profile Picture dan Access Token.
namun dari ke 5 data tersebut, hendaknya 4 data (Id, User Fullname, Email Address dan Access Token) disimpan ke dalam database aplikasi.

4 hal yang perlu dipersiapkan sebelum membuat aplikasi sederhana ini adalah :
- FB Application Id
- Library SDK Fb Login
- CodeIgniter Framework
- Bootstrap Template Login
- Konfigurasi DNS Local

DOWNLOAD COMPLETE SOURCE


1. Buat file baru dengan nama integration.php, simpan di /application/config/
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

//integrasi ke facebook
$config['fb_appid']   = '1012196705515661';
$config['fb_secret']  = 'b3951baccaa707a36e55c88a27bf38ab';


2. download class library facebook dan simpan di application/library/, ubah bagian appId dan secret :

if($config == null){ 
      $this->_ci =& get_instance();
      $this->_ci->load->config('integration');
      $config = array(
        'appId' => $this->_ci->config->item('fb_appid'),
        'secret' => $this->_ci->config->item('fb_secret'),
        );
    }
    
    if( !isset($config['appId']) || !isset($config['secret']) ){
      $this->_ci =& get_instance();
      $this->_ci->load->config('integration');
      $config['appId'] = $this->_ci->config->item('fb_appid');
      $config['secret'] = $this->_ci->config->item('fb_secret');
    }


3. ubah method index di controller welcome.php menjadi seperti berikut :

public function index(){

 $this->load->library('facebook'); 

 $user = $this->facebook->getUser();
        if ($user) {

            $profile  = $this->facebook->api('/me');

            //fb save access token into session - retrieve it to get any other information
            $access_token = $_SESSION['fb_'.$this->config->item('fb_appid').'_access_token'];

            // $profile variable (response) do not provide email address information even we've requested it from scope (line 41) , so we need to retrieve it from graph
            $getmail                = json_decode(read_file('https://graph.facebook.com/'.$user.'/?fields=email&access_token='.$access_token));

            //send all data into to view
            $data['id']           = $profile['id'];
            $data['full_name']    = $profile['name'];
            $data['email']        = $getmail->email;
            $data['button_lable'] = 'Logout';
            $data['facebook_url'] = site_url('welcome/out'); 

        } else {

            $data['button_lable'] = 'Login with Facebook';
            $data['facebook_url'] = $this->facebook->getLoginUrl(array(
                'redirect_uri' => site_url('welcome/index'), 
                // permissions here but I do not know why facebook don't send us an email information directly from response
                'scope' => array("email") 
            ));
        }

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

 }

4. Tambahkan method out() di controller.php

public function out(){
  $this->load->library('facebook');

        // Logs off session from website
        $this->facebook->destroySession();

  redirect();
 }

5. ubah view welcome_message.php di /application/view/ menjadi halaman login
<img alt="Generic placeholder thumbnail" class="img-responsive img-rounde" height="200" src="<?php echo $img; ?>" width="200" /> <a class="btn btn-lg btn-primary btn-block" href="<?php echo $facebook_url; ?>"><?php echo $button_lable; ?></a>






No comments:

Post a Comment