Google OAuth Api 簡單教學 – 飯糰 Blog
Google OAuth Api 簡單教學

使用前準備:
1. Google Cloud Platform 帳號 (一般 google 即可申請)
2. 使用網域 (這邊以 haer0248.me 當作範例)
3. composer require google/apiclient:^2.12.1
jQuery + PHP 基本認識 (?)

首先,前往 Google Cloud Platform 建立一個專案
連結: https://console.cloud.google.com/projectcreate

點選建立按鈕後必須等待一段時間,完成後右上方鈴鐺會通知已完成建立,並前往建立的該專案。

於左側列表點選 API 和服務 => OAuth 同意畫面
User Type 選擇【外部】
其餘查看下方圖片填寫即可,網域請填入正確網域,否則後面的 OAuth 用戶端ID 會無法成功建立。

完成後點選左側列表 API 和服務 => 憑證 => 建立憑證 => OAuth 用戶端 ID
依照下方圖片填寫即可完成:

完成後,前往 API和服務 => 憑證 查看 OAuth 2.0 用戶端 ID 部分,複製【用戶端 ID】,會長得像 xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com

以上為 Google Cloud Platform 部分,接下為網頁端。

在要登入的頁面中加入

<div id="g_id_onload" data-client_id="<填入用戶端 ID>" data-context="use" data-ux_mode="popup" data-callback="handleCredentialResponse" data-auto_prompt="false"></div>

<div class="g_id_signin" data-type="standard" data-shape="pill" data-theme="filled_black" data-text="continue_with" data-size="large" data-logo_alignment="left"></div>

<script>
function handleCredentialResponse(response) {
  $.ajax({
    type: "POST", url: "user.php", dataType: "json",
    data: {
      token: response.credential,
    },
    success: function (data) {
      alert(data.message);
    },
    error: function (jqXHR) {
      alert('登入失敗')
    }
  })
}
</script>

以下部分為使用按鈕呼叫 (jQuery 判斷後顯示的 JS)
*注意,此處透過 ajax Post 到指定的 PHP 頁面進行登入,回傳資料為 data. 開頭,若需要回傳資料請繼續查看下方。
*若需要下面三項以外的資料,必須申請通過才可以取得,其他公開的請前往: https://any-api.com/googleapis_com/oauth2/docs/userinfo/oauth2_userinfo_get

按鈕點選後帳號已選擇回傳資料頁面:

<?php
<?php
header('Content-Type: application/json; charset=UTF-8');

// 把 composer 載下來的函式庫塞進來
require_once 'vendor/autoload.php';

$return = array();
if ($_SERVER['REQUEST_METHOD'] == "POST") {
  /**
   *  這邊可以填寫輸入資料庫及任何判斷或記錄於 SESSION/COOKIE 的部分,
   *  輸出一定要有一個資料,否則於前端很難除錯!
   */
  $client  = new Google_Client(['client_id' => '<填入用戶端 ID>']);
  $payload = $client->verifyIdToken($_POST['token']);

  if ($payload) { // 驗證使用者是否存在
    $id = $payload['sub']; // Google Open ID
    $name = $payload['name']; // Username
    $mail = $payload['email']; // Email

    $return['message'] = '登入成功';
  } else {
    $return['message'] = '登入失敗';
  }
} else {
  $return['message'] = '傳輸方式錯誤';
}

echo json_encode($return); // 這邊就會往前端回傳 json

若有任何錯誤及問題,歡迎到 Discord 告知!

現在是一隻正在家裡工作的貓,興趣和專長大概就是打開 VSCode 亂寫東西。 平常會在 Twitch 開台,有興趣可以看看。

感謝您的閱讀 /ᐠ .ᆺ. ᐟ\

若您對本篇文章有任何建議或回饋,歡迎點擊下方圖片加入我的 Discord 伺服器來討論!