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
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 [free tuts .net]
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.