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.

test php

banquyen png

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

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:

Bài viết này được đăng tại [phpbbvietnam.com]

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 = 'https://phpbbvietnam.com.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.

Bài viết này, The Learn PHP Tutorial Đã gửi đến bạn đọc kiến thức về “Tích hợp đăng nhập Google vào Website❤️️”. Admin hy vọng qua phần nội dung trong bài”Tích hợp đăng nhập Google vào Website” có thể giúp bạn đọc có thêm kiến thức về “Tích hợp đăng nhập Google vào Website trong quá trình tự học PHP của mình .

Bài viết “Tích hợp đăng nhập Google vào Website” posted by on 2022-08-14 04:02:20. Cảm ơn bạn đọc đã xem bài viết tại Phpbbvietnam.com Và đừng quên chia sẻ bài viết này để nhiều người khác cũng có thể xem tài liệu học php miễn phí này nhé.

Read More:   Hàm mysqli_select_db trong php
Back to top button