集點送紅利 已發佈 2019-10-17

Google 登入 SDK 環境建置 + 初始化

最近接了一個案子,網頁中想加入 Facebook 及 Google 第三方登入,於是前前後後研究了快一個禮拜有…

其中踩了不少坑,因此寫篇文章以防以後忘記可以回顧。
( 關於 FaceBook 的話,跟 Google 的作法基本上是一樣的!
FB官方文件也翻譯的較完全,這邊就只介紹 Google 了。
有興趣的人也可以看看參考資料 )


1. 環境建置

因為在不是 HTTPS 的環境下,是無法使用 Google Sing-In SDK 的。
所以第一部我們必須先在 localhost 上建置 HTTPS,
其中使用 mkcert 可以幫助我們快速建置好環境。

a. 安裝 mkcert ( macOS )

打開終端機並按照順序輸入以下指令(不包括$)

 $ brew install mkcert
 $ brew install

b. 安裝完後輸入以下指令及 sudo 密碼

mkcert 會自動產生自己專用的 CA ( Certificate Authority ) 證書,
並顯示出證書位置在下面

 $ mkcert -install

 Created a new local CA at “/Users/filippo/Library/Application Support/mkcert” 
 The local CA is now installed in the system trust store! ⚡️
 The local CA is now installed in the Firefox trust store (requires restart)! 🦊

c. 接著輸入想要測試的域名

mkcert 會在 “目前的路徑” 產生出要使用的憑證及金鑰,這邊我是先進到 CA 證書的路徑才輸入指令,如果想在別的路徑產生的話,請忽略第一行 cd 語法。

 $ cd /Users/filippo/Library/Application Support/mkcert

 $ mkcert [example.com](http://example.com) localhost 127.0.0.1

 The certificate is at “./example.com+2.pem” and the key at “./example.com+2-key.pem” ✅

到這邊完成後,我們就可以開始使用證書摟!

d. 開啟使用 SSL 證書設定

這邊是使用 VS code 的外掛 Live Server 做範例!
( 如果想使用 webpack-dev-server 可以看看下方參考資料 )
首先到設定並找到 Liver Server 下的 HTTPS,
點選 setting jason ,並輸入以下設定:

“liveServer.settings.https”: {
  “enable”: true,
  “cert”: “/Users/YOUR NAME/Library/Application Support/mkcert/localhost+2.pem”,
  “key”: “/Users/YOUR NAME/Library/Application Support/mkcert/localhost+2-key.pem”,
  “passphrase”: “12345”
}

// enable: 使用 Https 為 true
// cert: 在 c 步驟產生憑證的“絕對路徑”
// key: 鑰匙

輸入完後再使用 Live Server 連上本地端,
並把 127.0.0.1 改成 localhost 就會出現鎖摟!

image

到這邊環境建置就 ok 了,大家掰掰!(喂


2. Google Sign in SDK

好啦,接著先來使用 Google 第三方登入!
先附上連結: Google Sign-In for WebSites

a. 建立新的 Google 專案

進去後點選 Get Started 並照著步驟申請一個新的專案,
再把官方文件上的此段複製到專案上,
並把 google-signin-client_id 此部分改成自己專屬 client ID

小提醒一下,官方有提到不要直接把 profile.getId() 取到的 ID 送去你的後端,請使用下方加密過的 id_token !

<html lang="en">
  <head>
    <meta name="google-signin-scope" content="profile email">
    <meta name="google-signin-client_id" content="YOUR_CLIENT_ID.apps.googleusercontent.com">
    <script src="https://apis.google.com/js/platform.js" async defer></script>
  </head>
  <body>
    <div class="g-signin2" data-onsuccess="onSignIn" data-theme="dark"></div>
    <script>
      function onSignIn(googleUser) {
        // Useful data for your client-side scripts:
        var profile = googleUser.getBasicProfile();
        console.log("ID: " + profile.getId()); // Don't send this directly to your server!
        console.log('Full Name: ' + profile.getName());
        console.log('Given Name: ' + profile.getGivenName());
        console.log('Family Name: ' + profile.getFamilyName());
        console.log("Image URL: " + profile.getImageUrl());
        console.log("Email: " + profile.getEmail());

        // The ID token you need to pass to your backend:
        var id_token = googleUser.getAuthResponse().id_token;
        console.log("ID Token: " + id_token);
      }
    </script>
  </body>
</html>

咦! 你問我自己的 ID 在哪嗎?
當然是要先進到 Google 的控制台啦!

連結附上: Google Developers
這邊我們也順便做好一些設定吧!

b. 相關設定

進到控制台並點選憑證,可以看到有兩個 ID
而我是使用下方的 Web client

image

複製貼上到專案後,點選編輯鈕進入編輯頁面,
並再已授權的 JavaScript 來源裡,新增 localhost 或是加上 port 端

image

接著就完成啦,還不趕緊到專案裡試試看!

後記

在這次使用上我發現使用 Google 登入過後,第二次點選登入他竟然會直接取用 cookies 的資料,導致不能再次輸入密碼或是選擇其他用戶。
這時候可以在 Google Button 上多加一樣 data-prompt 設定就好啦!
詳細設定可以參考官方說明文件中的 Reference

<div class="g-signin2" data-onsuccess="onSignIn" 
  data-theme="dark" data-prompt="select_account">
</div>

參考資料:

mkcert: valid HTTPS certificates for localhost

[推薦] 快速產生本地端開發用SSL憑證工具-mkcert | 辛比誌

[Google Sign-In for Websites] 整合Google帳號登入 Javascript SDK 的使用方式

[FB/Google] 社群帳號登入,使用Javascript SDK的Sample Code

網頁中加入「透過Facebook登入」功能

關於筆者

暱稱:集點送紅利

介紹:我喜歡日文,也喜歡 coding

文章列表 文章列表