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

DOWNLOAD

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

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.

Hãy để lại link bài viết gốc khi chia sẻ bài viết này, mình sẽ report DMCA với những website lấy nội dung mà không để nguồn hoặc copy bài với số lượng lớn.

Nguồn: freetuts.net

Profile photo of adminTheHalfHeart

TheHalfHeart

Có sở thích viết tuts nên đã từng tham gia viết ở một số diễn đàn, đến năm 2014 mới có điều kiện sáng lập ra freetuts.net. Sinh năm 90 và có 1 vợ 2 con, thích ca hát và lập trình.

ĐĂNG BÌNH LUẬN: Đăng câu hỏi trên Group Facebook để được hỗ trợ nhanh nhất.