Tools

Rất nhiều các dịch vụ của Google có thể truy cập và ứng dụng vào dự án PHP của bạn thông qua các API mà chính Google cung cấp. Google cung cấp sẵn các thư viện này ở đây:  google-api-php-client. Tải về và cài đặt thủ công vào dự án nhưng nên dùng Composer gõ lệnh sau để trong vendor có sẵn thư viện này:

composer require google/apiclient:^2.0

Như vậy đã có thư viện, đảm bảo load thư viện băng cách thêm mã: include "vendor/autoload.php";

Sử dụng xác thực OAuth tài khoản Google Plus

Dịch vụ này cho phép người dùng cung cấp các thông tin xác thực để đăng nhập vào website của bạn chẳng hạn. Người dùng sẽ chuyển hưởng đến dịch vụ của Google và Google sẽ cung cấp lại các thông tin cần thiết để xác thực như ID, username, email ... tùy thuộc vào sự cho phép của người dùng.

Để sử dụng được bạn cần các thông số sau :

Bạn phải có một tài khoản Google Console tại https://console.developers.google.com/ vậy hãy đăng ký tài khoản này trước. Sau đó bấm vào mục Create Project, đồng ý với các điều khoản để tạo dự án của bạn.

Tạo Credentials: Đây là mã để ứng dụng của bạn truy cập dịch vụ. Bạn chọn dự án mới tạo ra, chọn đến mục Credentials để tạo mới. Khi bấm vào Create Credential, chọn mục OAuth client ID.

google-api

Tiếp theo bấm vào Config consent screen để cấu hìn ứng dụng trược. Bạn nhập vào tên ứng dụng đăng nhập của bạn và tùy chọn thêm (không cũng được) cung cấp một logo (Logo xuất hiện khi hỏi người dùng cho phép cung cấp xác thực), cung cấp các đường dẫn URL đến Website của bạn như trang Privacy, Term ...

Sau khi Save lại, màn hình hiện ra chọn Web application. Nhập vào thêm các thông tin (quan trọng)

  • Tên ứng dụng đăng nhập
  • Url đến website (ví dụ http://xuanthulab.net).
  • Authorized redirect URI: (rất quan trọng) - là đường dẫn chính xác đến trang xác thực (login) bằng tài khoản Google với user của bạn. Trang này là trang mà sau khi người dùng xác thực từ Google, Google sẽ chuyển hướng và cấp thông tin đến Url này (và bạn phải lập trình để lấy thông tin này). Ví dụ Url này như sau: http://xuanthulab.net/logingoogle.php
  • Sau khi tạo xong bạn sẽ được cung cấp Client IDClient serect. Lấy lại hai mã này để sử dụng (bạn phải giữ bí mật mã này). Hai mã này có dạng ví dụ 537075956582-2kvdcqff03254g53pjgond5a5f4pn7fv.apps.googleusercontent.com và serect là: 5FgFikxxxxxxxxxxIvO2mvFE.

Như vậy bước chuẩn bị đã xong, cơ bản bước này bạn cần một tài khoản Google Console, mã Client ID, Client Serect và Url nào mà Google chuyển hướng thông tin cho bạn.

Lập trình với Google Client

Bạn quay lại dự án mà đã dùng Composer để cài thư viện trên vào để bất đầu sử dụng.

Tạo trang đăng nhập với Google Client, bạn tạo file php tên là logingoogle.php. Trong đó bạn cần làm các việc sau:

Tạo một đối tượng Google_Client, cung cấp Scope (phạm vi truy cập), gán Client ID và Serect ở trên vào. 

Để tham khảo các Scope: https://developers.google.com/identity/protocols/googlescopes

<?php
    /**
     * Trang này để lấy thông tin đăng nhập từ google, nếu chưa đăng nhập sẽ mở popup để xác thực từ Google
     */
    include "vendor/autoload.php";

    /** getinfo: Hàm này lấy thông tin User sau khi đã xác thực thành công, nên chuyển hàm này vào file khác
     * @param $client Google_Client
     * @return mixed
     */
    function getinfo($client) {

        $client->setAccessToken($_SESSION['access_token']);
        $plus = new Google_Service_Plus($client);

        if ($client->isAccessTokenExpired()) {
            //Truy cập bị hết hạn, cần xác thực lại
            //Chuyển hướng sang Google để lấy xác thực
            $auth_url = $client->createAuthUrl();
            header("Location: $auth_url");
            die();
        }


        //Lấy các thông tin của User
        $me = $plus->people->get('me');
        $id    = @$me['id'];                    //ID
        $email = @$me['emails'][0]['value'];    //Địa chỉ email
        $name  = @$me['displayName'];           //Tên
        $image = @$me['image']['url'];          //Url của ảnh avatar
    }

    $client = new Google_Client();

    $redirecturi = "http://xuanthulab.net/logingoogle.php";

    $client->setRedirectUri($redirecturi);

    //Khai báo xin các quyền truy cập: lấy email, tên, ID người dùng ...
    $client->addScope([
        'https://www.googleapis.com/auth/plus.login',
        'https://www.googleapis.com/auth/userinfo.email'
    ]);

    //Set param google API
    $client->setClientId('điền mã Client ID đã cấp');
    $client->setClientSecret('điền mã Secret đã cấp');
    $client->setAccessType('offline');

    //Đây là URL bạn cần mở nếu chưa đăng nhập
    $auth_url = $client->createAuthUrl();


    if (isset($_SESSION['access_token']) && $_SESSION['access_token'])
    {
        /*
         * Đã đăng nhập trước rồi do tồn tại access_token trong Session
         * Nên bạn không cần xác thực từ Google nữa mà chỉ việc lấy thông tin
         */
        getinfo($client);
        //Sau khi lấy được thông tin xử lý xong nhớ chuyển hướng sang trang khác.

    }
    else
    {
        /**
         * Nếu tồn tại $_GET['code'] trên URL có nghĩa là Google vừa gửi Code truy cập tới cho bạn, bạn cần lấy thông
         * tin này để truy cập.
         */
        if (isset($_GET['code'])) {
            $client->fetchAccessTokenWithAuthCode($_GET['code']);
            //Lấy mã Token và lưu lại tại SESSION
            $_SESSION['access_token'] = $client->getAccessToken();
            getinfo($client);
            //Sau khi lấy được thông tin xử lý xong nhớ chuyển hướng sang trang khác.
        }
        else
        {
            //Chuyển hướng sang Google để lấy xác thực
            $auth_url = $client->createAuthUrl();
            header("Location: $auth_url");
            die();
        }
    }

 

 

 

Đăng ký theo dõi ủng hộ kênh