google oauth

2022 06更新

<html>
  <body>
    <script src="https://accounts.google.com/gsi/client" async defer></script>
    <div id="g_id_onload"
         data-client_id=""
         data-callback="handleCredentialResponse">
    </div>
    <div class="g_id_signin" data-type="standard"></div>
  </body>
  <script>
    function handleCredentialResponse(e){
      console.log(e)
    }
  </script>
</html>

如果出現網域不再許可範圍內記得加入以下,並且加入沒有 port 的網域

https://console.cloud.google.com/apis/credentials/oauthclient/

1.先到dev console申請帳號和註冊應用程式 https://console.developers.google.com/project/_/apiui/apis/library

2.到api管理員-->憑證-->已授權的 JavaScript 來源 ,填入http://localhost:3000 (記得,下面的已授權的重新導向 URI不要填)

3.加入這段到網頁

4.加入meta tag到網頁(後面要改為你自己的client id)

5.直接放入google做好的signin button

6.此時已可正常登入,但我們看不到任何登入後的訊息,所以要加入下面這個function

7.如何登出

8.傳送使用者id到server做認證 (如同官方告知的profile.getId()不安全,所以要用另一個方式)

將剛才那段function改為

之後會在console看到如下

9.從client傳送這個給server即可

進階認證

10.但,使用者可能得到你的post位置後,直接傳入此位置一個他人的(id_token),為了避免這樣的情況,我們可以在server端再次傳送id_token給google提供的endpoint做認證

使用get方式傳給上述地址,而把id_token改為你要傳的id_token即可

12.把我們剛才從網頁console下來的id_token直接加在上面的網址後然後貼到瀏覽器進入該網址

如token正確會得到如下

如錯誤會得到如下

最後再檢查上面的aud是否與你自己在google dev console註冊到的用戶端 ID相同即可

範例:

另外google提供的Google API Client Library

(有興趣可參考)

https://developers.google.com/api-client-library/javascript/dev/dev_jscript#setting-credentials

參考至: https://developers.google.com/identity/sign-in/web/sign-in#before_you_begin

Last updated

Was this helpful?