PHP TUTORIALS
Hướng dẫn tạo domain ảo tại localhost với XAMPP trên Window Có gì mới trong PHP 8 (Tính năng, Cải tiến và Trình biên dịch JIT) Hướng dẫn viết ứng dụng kiểm tra năm sinh theo âm lịch bằng PHP Xử lý realtime trong PHP sử dụng pusher Hướng dẫn gửi mail trong PHP với PHPMailer Bóc tách dữ liệu từ trang khác bằng PHP Simple HTML DOM Parser Cách sửa lỗi hình ảnh khi đăng bài viết lên Facebook Hướng dẫn tạo thông báo realtime với pushcrew Kích thước chuẩn và cách làm FavIcon icon Tìm hiểu bản chất vòng lặp foreach trong php Những vấn đề nâng cao kỹ năng lập trình trong php Sử Dụng Vòng Lặp Xuất Dữ Liệu Bảng Tính Lương Tìm hiểu thuật toán phân trang trong php Giới hạn số trang trong thuật toán phân trang Bài 01: Đệ quy menu đa cấp với php và mysql - phần 1 Bài 02: Đệ quy menu đa cấp với php và mysql - phần 2 Tích hợp bộ search google vào website Nên dùng count() hay sizeof() để đếm số phần tử của mảng Bài 01: Lấy dữ liệu từ mysql lưu vào file excel với PHPExcel Tạo slug tự động bằng JavaScript và PHP RSS là gì? Cách Tạo RSS cho Website PHP CMS là gì? Các CMS phổ biến hiện nay (update 2021) Web động là gì? Web tĩnh là gì? Chặn referrer từ website simple-share-buttons.com Bảng mã ASCII chuẩn các hệ nhị phân - thập phân - thập lục phân Hướng dẫn tạo Facebook App để lấy App ID và Secret Key Mối liên hệ giữa HTML - PHP - MYSQL Tự động post bài viết lên tường với hootsuite.com Kiểm tra người dùng đã đăng nhập hay chưa bằng PHP Lấy video kênh Youtube mới nhất bằng jQuery và Youtube API V3 Đệ quy chuyên mục đa cấp trong PHP toàn tập Font Awesome là gì? Cách sử dụng Font Awesome Tích hợp đăng nhập Google vào Website Thuật toán phân trang với PHP và MySQL Cài đặt LAMP trên Fedora
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Tích hợp đăng nhập Google vào Website

Chào các bạn. Như đã biết thì Google API client library sẽ cho phép chung ta sử dụng rất nhiều dịch vụ của Google như Google+, Drive, Google Map, Yotube,...và hôm nay tôi sẽ hướng dẫn các bạn cách sử dụng nó để đăng nhập vào website. Và tất nhiên để sử dụng thư viện này chúng ta cần phải có Client id và Secret key và đây là cách để lấy Client id và Secret key từ Google API Console.

Mục tiêu: Đăng nhập hoặc tạo mới 1 account với Google API

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Yêu cầu cho project này:

  • PHP version 5.4 hoặc cao hơn
  • Client id và Secret Key
  • Thư viện Google API client library for php
  • Cấu trúc folder: project /google_api/login (bạn có thể thay đổi theo cách của bạn)

1. Tạo database

Việc đầu tiên là tạo 1 database với cấu trúc table như sau:

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(200) NOT NULL,
  PRIMARY KEY (`google_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

2. Tải thư viện Google API client

Có 2 cái cách để tải:

Cách 1: Tải trực tiếp từ Github thông qua link này. Sau khi tải về bạn giải nén và copy tất cả bỏ vào thư mục login/

Cách 2: Sử dụng composer để tải về:

Mở thư mục /google_api/login/ và tạo 1 file composer.json với nội dung

{
	"require": {
	  "google/apiclient": "1.0.*@beta"
	}
}

Sau đó trên command line chạy lệnh: Composer install và một folder vendor sẽ xuất hiện trong code của bạn

3. Tạo page login và xử lý thôi

Tạo 1 page login.php trong thư mục google_api/login/ với nội dung

<?php

require_once '/vendor/autoload.php';

// Lấy những giá trị này từ https://console.google.com
$client_id = '81678134426-j16al8im2mbsetfse3dv43svgvcs3cr8.apps.googleusercontent.com'; 
$client_secret = '6d69gLy991-1H-mxDnUQD8dg';
$redirect_uri = 'http://freetuts.app/google_api/login/login.php';

//Thông tin kết nói database
$db_username = "root"; //Database Username
$db_password = ""; //Database Password
$host_name = "localhost"; //Mysql Hostname
$db_name = 'free_tuts'; //Database Name
###################################################################

$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->addScope("email");
$client->addScope("profile");

$service = new Google_Service_Oauth2($client);

// Nếu kết nối thành công, sau đó xử lý thông tin và lưu vào database
if (isset($_GET['code'])) {
  	$client->authenticate($_GET['code']);
 	$_SESSION['access_token'] = $client->getAccessToken();
  	//header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
  	$user = $service->userinfo->get(); //get user info 

   	// connect to database
	$mysqli = new mysqli($host_name, $db_username, $db_password, $db_name);
	if ($mysqli->connect_error) {
	    die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
	}

	//Kiểm tra xem nếu user này đã tồn tại, sau đó nên login tự động
	$result = $mysqli->query("SELECT COUNT(google_id) as usercount FROM google_users WHERE google_id=$user->id");
	$user_count = $result->fetch_object()->usercount; //will return 0 if user doesn't exist

	//show user picture
	echo '<img src="'.$user->picture.'" style="float: right;margin-top: 33px;" />';

	if($user_count) // Nếu user tồn tại thì show thông tin hiện có
	{
	    echo 'Welcome back '.$user->name.'! [<a href="'.$redirect_uri.'?logout=1">Log Out</a>]';
	}
	else //Ngược lại tạo mới 1 user vào database
	{ 
	    echo 'Hi '.$user->name.', Thanks for Registering! [<a href="'.$redirect_uri.'?logout=1">Log Out</a>]';
	    $statement = $mysqli->prepare("INSERT INTO google_users (google_id, google_name, google_email, google_link, google_picture_link) VALUES (?,?,?,?,?)");
	    $statement->bind_param('issss', $user->id,  $user->name, $user->email, $user->link, $user->picture);
	    $statement->execute();
	    echo $mysqli->error;
	}
  	exit;
}

//Nếu sẵn sàng kết nối, sau đó lưu session với tên access_token
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
 	$client->setAccessToken($_SESSION['access_token']);
} else { // Ngược lại tạo 1 link để login
 	$authUrl = $client->createAuthUrl();
}

//Hiển thị button để login
echo '<div style="margin:20px">';
if (isset($authUrl)){ 
    //show login url
    echo '<div align="center">';
    echo '<h3>Login with Google -- Demo</h3>';
    echo '<div>Please click login button to connect to Google.</div>';
    echo '<a class="login" href="' . $authUrl . '">LOGIN</a>';
    echo '</div>';
    
} 
echo '</div>';

Truy cập link http://locahost/google_api/login/login.php và xem kết quả

4. Lời kết

Trong bài viết này có đề cập đến chức năng sử dụng composer để quản lý các thư viện và các để lấy Client ID và Secret key từ google api console. Tôi sẽ hướng dẫn chi tiết vào bài viết khác.

Nếu bạn có bất kỳ vấn đề gì trong quá trình tích hợp hãy để lại comment bên dưới. Tôi sẽ trả lời sớm nhất.

Cùng chuyên mục:

Hàm key_exists() trong PHP

Hàm key_exists() trong PHP

Cách sử dụng key_exists() trong PHP

Hàm mysqli_fetch_row() trong PHP

Hàm mysqli_fetch_row() trong PHP

Cách sử dụng mysqli_fetch_row() trong PHP

Hàm end() trong PHP

Hàm end() trong PHP

Cách sử dụng end() trong PHP

Hàm mysqli_field_count() trong PHP

Hàm mysqli_field_count() trong PHP

Cách sử dụng mysqli_field_count() trong PHP

Hàm count() trong PHP

Hàm count() trong PHP

Cách sử dụng count() trong PHP

Hàm mysqli_field_seek() trong PHP

Hàm mysqli_field_seek() trong PHP

Cách sử dụng mysqli_field_seek() trong PHP

Hàm compact() trong PHP

Hàm compact() trong PHP

Cách sử dụng compact() trong PHP

Hàm mysqli_field_tell() trong PHP

Hàm mysqli_field_tell() trong PHP

Cách sử dụng mysqli_field_tell() trong PHP

Hàm array_values() trong PHP

Hàm array_values() trong PHP

Cách sử dụng array_values() trong PHP

Hàm mysqli_free_result() trong PHP

Hàm mysqli_free_result() trong PHP

Cách sử dụng mysqli_free_result() trong PHP

Hàm array_unshift() trong PHP

Hàm array_unshift() trong PHP

Cách sử dụng array_unshift() trong PHP

Hàm mysqli_get_charset() trong PHP

Hàm mysqli_get_charset() trong PHP

Cách sử dụng mysqli_get_charset() trong PHP

Hàm array_shift() trong PHP

Hàm array_shift() trong PHP

Cách sử dụng array_shift() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Cách sử dụng mysqli_get_client_stats() trong PHP

Hàm array_unique() trong PHP

Hàm array_unique() trong PHP

Cách sử dụng array_unique() trong PHP

Hàm mysqli_get_client_version() trong PHP

Hàm mysqli_get_client_version() trong PHP

Cách sử dụng mysqli_get_client_version() trong PHP

Hàm array_uintesect() trong PHP

Hàm array_uintesect() trong PHP

Cách sử dụng array_uintesect() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Cách sử dụng mysqli_get_connection_stats() trong PHP

Hàm array_sum() trong PHP

Hàm array_sum() trong PHP

Cách sử dụng array_sum() trong PHP

Hàm mysqli_get_host_info() trong PHP

Hàm mysqli_get_host_info() trong PHP

Cách sử dụng mysqli_get_host_info() trong PHP

Top