Login dengan Google Library PHP OAuth2

 Author : hadinug, 01 April, 2014, Komentar



Jika sebelumnya penulis menuliskan tentang bagaimana login dengan Facebook Library PHP, nah kali ini penulis akan membagikan sedikit pengalaman bagaimana membuat aplikasi login dengan Google Library PHP OAuth2.


Tidak hanya sekedar melakukan pengecekan login saja, data user yang login akan kita masukan ke dalam database untuk sewaktu-waktu login kembali, kita tidak perlu menambahkan datan kedalam database kita lagi. Tapi tenang saja data user yang login aman, kita hanya mengambil beberapa informasi saja dan rentang dalam beberapa waktu akan kita hapus.


Tutorial ini hanya membutuhkan satu halaman PHP, semua tugas dilakukan dalam halaman dengan dukungan dari Google Library Client API untuk PHP. File-file library yang termasuk dalam file download di bagian bawah halaman ini, juga melihat contoh kode mereka, karena tutorial ini didasarkan pada itu.



Database Tabel

Jalankan query SQL di bawah ini untuk membuat tabel MySQL baru yang disebut "google_users" menggunakan phpMyAdmin. Ada lima kolom dalam tabel database untuk tutorial kali ini, dan ID profil Google cukup panjang oleh karena itu kita gunakan  (21 karakter), oleh karena tidak mungkin untuk mengakomodasi ID ini ke INT atau field BIGINT, maka penulis menggunakan DECIMAL (21,0), tetapi anda juga dapat menyimpannya sebagai string dalam field VARCHAR.

CREATE TABLE IF NOT EXISTS `google_users` (
  `google_id` decimal(21,0) NOT NULL,
  `google_name` varchar(60) NOT NULL,
  `google_email` varchar(60) NOT NULL,
  `google_link` varchar(60) NOT NULL,
  `google_picture_link` varchar(60) NOT NULL,
  PRIMARY KEY (`google_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Login dan Proses

Kita perlu untuk mendapatkan id klien, kunci rahasia dan kunci pengembang dari konsol API Google, Jika anda belum punya  bagaimana? , silakan lihat ddan dibuat kunci API Google

Ganti pengaturan Google dengan Client dan kunci Developer yang anda peroleh dari Google, dan rincian basis data MySql website Anda.

########## Google Settings.. Client ID, Client Secret from https://cloud.google.com/console #############
$google_client_id       = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$google_client_secret   = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$google_redirect_url    = 'http://localhost/google/'; //path to your script
$google_developer_key   = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
########## MySql details (Replace with yours) #############
$db_username = "xxxxxxxxx"; //Database Username
$db_password = "xxxxxxxxx"; //Database Password
$hostname = "localhost"; //Mysql Hostname
$db_name = 'xxxxxxxxx'; //Database Name
###################################################################

Proses berjalan seperti ini - ketika pengguna mengklik link login Google, pengguna diarahkan ke halaman Google Authentication, setelah pengguna memberikan izin dasar untuk mengakses data mereka, pengguna diarahkan kembali ke website Anda dengan kode Authentication. Kode ini digunakan untuk memperoleh akses Token, menggunakan Access Token aplikasi dapat mengakses data pengguna saat ini dari Google, yang dapat digunakan untuk mendaftar dan login pengguna.

<?php
//include google api files
require_once 'src/Google_Client.php';
require_once 'src/contrib/Google_Oauth2Service.php';

//start session
session_start();

$gClient = new Google_Client();
$gClient->setApplicationName('Login to Sanwebe.com');
$gClient->setClientId($google_client_id);
$gClient->setClientSecret($google_client_secret);
$gClient->setRedirectUri($google_redirect_url);
$gClient->setDeveloperKey($google_developer_key);

$google_oauthV2 = new Google_Oauth2Service($gClient);

//If user wish to log out, we just unset Session variable
if (isset($_REQUEST['reset'])) 
{
  unset($_SESSION['token']);
  $gClient->revokeToken();
  header('Location: ' . filter_var($google_redirect_url, FILTER_SANITIZE_URL)); //redirect user back to page
}

//If code is empty, redirect user to google authentication page for code.
//Code is required to aquire Access Token from google
//Once we have access token, assign token to session variable
//and we can redirect user back to page and login.
if (isset($_GET['code'])) 
{ 
    $gClient->authenticate($_GET['code']);
    $_SESSION['token'] = $gClient->getAccessToken();
    header('Location: ' . filter_var($google_redirect_url, FILTER_SANITIZE_URL));
    return;
}


if (isset($_SESSION['token'])) 
{ 
    $gClient->setAccessToken($_SESSION['token']);
}


if ($gClient->getAccessToken()) 
{
      //For logged in user, get details from google using access token
      $user                 = $google_oauthV2->userinfo->get();
      $user_id              = $user['id'];
      $user_name            = filter_var($user['name'], FILTER_SANITIZE_SPECIAL_CHARS);
      $email                = filter_var($user['email'], FILTER_SANITIZE_EMAIL);
      $profile_url          = filter_var($user['link'], FILTER_VALIDATE_URL);
      $profile_image_url    = filter_var($user['picture'], FILTER_VALIDATE_URL);
      $personMarkup         = "$email<div><img src='$profile_image_url?sz=50'></div>";
      $_SESSION['token']    = $gClient->getAccessToken();
}
else 
{
    //For Guest user, get google login url
    $authUrl = $gClient->createAuthUrl();
}

//HTML page start
echo '<!DOCTYPE HTML><html>';
echo '<head>';
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
echo '<title>Login with Google</title>';
echo '</head>';
echo '<body>';
echo '<h1>Login with Google</h1>';

if(isset($authUrl)) //user is not logged in, show login button
{
    echo '<a class="login" href="'.$authUrl.'"><img src="images/google-login-button.png" /></a>';
} 
else // user logged in 
{
   /* connect to database using mysqli */
    $mysqli = new mysqli($hostname, $db_username, $db_password, $db_name);
    
    if ($mysqli->connect_error) {
        die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
    }
    
    //compare user id in our database
    $user_exist = $mysqli->query("SELECT COUNT(google_id) as usercount FROM google_users WHERE google_id=$user_id")->fetch_object()->usercount; 
    if($user_exist)
    {
        echo 'Welcome back '.$user_name.'!';
    }else{ 
        //user is new
        echo 'Hi '.$user_name.', Thanks for Registering!';
        $mysqli->query("INSERT INTO google_users (google_id, google_name, google_email, google_link, google_picture_link) 
        VALUES ($user_id, '$user_name','$email','$profile_url','$profile_image_url')");
    }

    
    echo '<br /><a href="'.$profile_url.'" target="_blank"><img src="'.$profile_image_url.'?sz=100" /></a>';
    echo '<br /><a class="logout" href="?reset=1">Logout</a>';
    
    //list all user details
    echo '<pre>'; 
    print_r($user);
    echo '</pre>';  
}
 
echo '</body></html>';
?>

Untuk mencoba live demo silahkan dillihat lihat dilinknya, dan untuk download klik link nya dan cobalah untuk menjalankan nya dilocalhost Anda. Jangan lupa untuk ilkuti langkah-langkah diatas.



 
Bagikan halaman ke sosial media
 
Tags :   google    oauth    login       

Tentang Penulis

writer hadinug
Web Developer di PT. Yafii Solusi Internasional

Link: http://ysi.co.id

   Komentar Anda