TUTORIAL

Cara Membuat Login dengan Twitter di CodeIgniter

シックス , TUTORIAL
0
1488

Twitter adalah salah satu jaringan sosial populer dan paling banyak digunakan. Jutaan orang di seluruh dunia terhubung dengan Twitter. Ketika sistem login Twitter  diintegrasikan ke dalam aplikasi web Anda, Pasti membantu untuk membuat proses login pengguna menjadi lebih mudah. Pengguna dapat login ke website Anda dengan akun Twitter. Dan juga, Anda bisa mendapatkan rincian profil pengguna dari Twitter ketika mereka login dengan Twitter.

 

Dalam tutotial ini kita akan belajar bagaimana mengintegrasikan Twitter Login di CodeIgniter menggunakan LibraryTwitter OAuth dan memungkinkan pengguna untuk login dengan Twitter dalam aplikasi CodeIgniter.

 

Membuat Twitter Apps

 

Consumer Key atau Rahasia Konsumen diperlukan untuk menggunakan LibraryTwitter OAuth. Itulah mengapa Anda perlu membuat Twitter App terlebih dahulu.

 

  • Kunjungi halaman Twitter Application Management dan login dengan akun Twitter.
  • Masukkan rincian berikut untuk membuat aplikasi Twitter yang baru.
    • Name: Nama aplikasi Anda. Nama aplikasi akan ditunjukkan kepada pengguna saat otorisasi.
    • Description: Deskripsi aplikasi Anda. Deskripsi aplikasi akan ditunjukkan kepada pengguna saat otorisasi.
    • Website: aplikasi website Anda. (Http://example.com).
    • Callback URL(*): Setelah authorization, URL akan memanggil oauth_token. (http://example.com/user_authentication/)
  • Mengubah izin aplikasi untuk Read and Write atau Read.
  • Sekarang Anda harus perlu menguji OAuthentication, klik Test OAuth dan login dengan akun twitter Anda untuk tes OAuth. Setelah itu anda akan diarahkan ke halaman OAuth Settings. Pada halaman OAuth Settings, Anda dapat melihat Key Konsumen (API Key) dan Konsumen Rahasia (API Secret).

 

Copy the Consumer Key dan Consumer Secret yang nanti akan kita gunakan dalam script.

Sebelum Anda mulai proses integrasi login Twitter, lihatlah struktur folder dan file untuk login Twitter di CodeIgniter.

 

codeigniter-twitter-login-files-structure-codexworld

Mebuat Tabel Database


CREATE TABLE `users` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `oauth_provider` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `oauth_uid` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `username` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `first_name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `last_name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `locale` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
 `picture_url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `profile_url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `created` datetime NOT NULL,
 `modified` datetime NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 

Controllers (User_authentication.php)


<?php defined('BASEPATH') OR exit('No direct script access allowed');
class User_Authentication extends CI_Controller
{
    function __construct() {
        parent::__construct();
        //Load user model
        $this->load->model('user');
    }
    
    public function index(){
        $userData = array();
        
        //Include the twitter oauth php libraries
        include_once APPPATH."libraries/twitter-oauth-php-codexworld/twitteroauth.php";
        
        //Twitter API Configuration
        $consumerKey = 'Insert_Twitter_API_Key';
        $consumerSecret = 'Insert_Twitter_API_Secret';
        $oauthCallback = base_url().'user_authentication/';
        
        //Get existing token and token secret from session
        $sessToken = $this->session->userdata('token');
        $sessTokenSecret = $this->session->userdata('token_secret');
        
        //Get status and user info from session
        $sessStatus = $this->session->userdata('status');
        $sessUserData = $this->session->userdata('userData');
        
        if(isset($sessStatus) && $sessStatus == 'verified'){
            //Connect and get latest tweets
            $connection = new TwitterOAuth($consumerKey, $consumerSecret, $sessUserData['accessToken']['oauth_token'], $sessUserData['accessToken']['oauth_token_secret']); 
            $data['tweets'] = $connection->get('statuses/user_timeline', array('screen_name' => $sessUserData['username'], 'count' => 5));

            //User info from session
            $userData = $sessUserData;
        }elseif(isset($_REQUEST['oauth_token']) && $sessToken == $_REQUEST['oauth_token']){
            //Successful response returns oauth_token, oauth_token_secret, user_id, and screen_name
            $connection = new TwitterOAuth($consumerKey, $consumerSecret, $sessToken, $sessTokenSecret);
            $accessToken = $connection->getAccessToken($_REQUEST['oauth_verifier']);
            if($connection->http_code == '200'){
                //Get user profile info
                $userInfo = $connection->get('account/verify_credentials');

                //Preparing data for database insertion
                $name = explode(" ",$userInfo->name);
                $first_name = isset($name[0])?$name[0]:'';
                $last_name = isset($name[1])?$name[1]:'';
                $userData = array(
                    'oauth_provider' => 'twitter',
                    'oauth_uid' => $userInfo->id,
                    'username' => $userInfo->screen_name,
                    'first_name' => $first_name,
                    'last_name' => $last_name,
                    'locale' => $userInfo->lang,
                    'profile_url' => 'https://twitter.com/'.$userInfo->screen_name,
                    'picture_url' => $userInfo->profile_image_url
                );
                
                //Insert or update user data
                $userID = $this->user->checkUser($userData);
                
                //Store status and user profile info into session
                $userData['accessToken'] = $accessToken;
                $this->session->set_userdata('status','verified');
                $this->session->set_userdata('userData',$userData);
                
                //Get latest tweets
                $data['tweets'] = $connection->get('statuses/user_timeline', array('screen_name' => $userInfo->screen_name, 'count' => 5));
            }else{
                $data['error_msg'] = 'Some problem occurred, please try again later!';
            }
        }else{
            //unset token and token secret from session
            $this->session->unset_userdata('token');
            $this->session->unset_userdata('token_secret');
            
            //Fresh authentication
            $connection = new TwitterOAuth($consumerKey, $consumerSecret);
            $requestToken = $connection->getRequestToken($oauthCallback);
            
            //Received token info from twitter
            $this->session->set_userdata('token',$requestToken['oauth_token']);
            $this->session->set_userdata('token_secret',$requestToken['oauth_token_secret']);
            
            //Any value other than 200 is failure, so continue only if http code is 200
            if($connection->http_code == '200'){
                //Get twitter oauth url
                $twitterUrl = $connection->getAuthorizeURL($requestToken['oauth_token']);
                $data['oauthURL'] = $twitterUrl;
            }else{
                $data['oauthURL'] = base_url().'user_authentication';
                $data['error_msg'] = 'Error connecting to twitter! try again later!';
            }
        }

        $data['userData'

0 Comments

×