本參考資料說明您將用來在網頁應用程式中實作 Google 登入功能的 JavaScript 用戶端方法和屬性。
如果您在使用程式庫時遇到任何問題,請向我們的 GitHub 存放區回報。
驗證設定
載入 Google API 平台程式庫以建立 gapi
物件:
<script src="https://apis.google.com/js/platform.js?onload=init" async defer></script>
平台程式庫載入後,請載入 auth2
程式庫:
function init() {
gapi.load('auth2', function() {
/* Ready. Make a call to gapi.auth2.init or some other API */
});
}
gapi.auth2.init(params)
初始化 GoogleAuth
物件。您必須先呼叫這個方法,才能呼叫 gapi.auth2.GoogleAuth
的方法。
初始化 GoogleAuth
物件時,請以 OAuth 2.0 用戶端 ID 設定物件,以及您要指定的任何其他選項。接著,如果使用者已登入,GoogleAuth
物件會還原使用者在上一個工作階段的登入狀態。
引數 | |
---|---|
params |
包含用戶端設定資料鍵/值組合的物件。如要瞭解其他可設定屬性的資訊,請參閱 gapi.auth2.ClientConfig 。例如:
{ client_id: 'CLIENT_ID.apps.googleusercontent.com' } |
傳回 | |
---|---|
gapi.auth2.GoogleAuth |
gapi.auth2.GoogleAuth 物件。請使用 then() 方法取得可在 gapi.auth2.GoogleAuth 物件初始化完成時解析的 Promise。 |
GoogleAuth.then(onInit, onError)
在 GoogleAuth
物件完全初始化時呼叫 onInit 函式。如果初始化期間發生錯誤 (在舊版不支援的瀏覽器中可能發生錯誤),系統會改為呼叫 onError 函式。
引數 | |
---|---|
onInit |
完整初始化時,系統會透過 GoogleAuth 物件呼叫該函式。 |
onError |
如果 GoogleAuth 無法初始化,則會使用包含 error 屬性的物件呼叫函式。 |
傳回 | |
---|---|
保證 | 在 onInit 函式完成時完成的 Promise ,如果引發初始化錯誤,則遭到拒絕。這個函式會使用 onInit 函式傳回的值 (如果有的話)。 |
錯誤代碼
idpiframe_initialization_failed
- 例如,由於不支援的環境,因此無法從 Google 初始化必要的 iframe。
details
屬性會提供更多關於發生錯誤的資訊。
gapi.auth2.ClientConfig
代表 gapi.auth2.init
方法不同設定參數的介面。
參數 | ||
---|---|---|
client_id |
string |
必要。應用程式的用戶端 ID (可在 Google Developers Console 中找到並建立)。 |
cookie_policy |
string |
要建立登入 Cookie 的網域。URI、single_host_origin 或 none 皆可。如未指定,則預設值為 single_host_origin 。 |
scope |
string |
要求的範圍,以空格分隔的字串表示。如果 fetch_basic_profile 未設為 false,則為選用元素。 |
fetch_basic_profile |
boolean |
在使用者登入時擷取使用者的基本個人資料。將「profile」、「email」和「openid」新增至要求的範圍。若未指定,則為 true。 |
hosted_domain |
string |
使用者必須所屬的 G Suite 網域才能登入帳戶。由於用戶端容易修改內容,因此請務必驗證傳回使用者的代管網域屬性。在用戶端上使用 GoogleUser.getHostedDomain(),並在伺服器上 ID 權杖中使用 hd 憑證附加資訊,藉此驗證網域。 |
ux_mode |
string |
登入流程使用的使用者體驗模式。根據預設,同意聲明流程會在彈出式視窗中開啟。有效值為 popup 和 redirect 。 |
redirect_uri |
string |
如果使用 ux_mode='redirect' ,這個參數可讓您覆寫同意聲明流程結束時會使用的預設 redirect_uri 。預設的 redirect_uri 是目前去除查詢參數和雜湊片段的網址。 |
enable_granular_consent |
boolean |
選用設定。是否要啟用精細權限。如果設為 false ,系統會停用 2019 年前建立的 OAuth 用戶端 ID 中更精細的 Google 帳戶權限。無論在 2019 年期間或之後建立的 OAuth 用戶端 ID,都不會受到任何影響,因為系統一律會為這類 ID 啟用更精細的權限。 |
plugin_name |
string |
選用設定。如果設定了這個值,2022 年 7 月 29 日前建立的新用戶端 ID 就能使用舊版 Google 平台資料庫。
根據預設,新建立的用戶端 ID 無法使用平台資料庫,請改用新版 Google Identity 服務程式庫。您可以選擇任何值,建議使用描述性名稱 (例如產品或外掛程式名稱),以便識別。
範例:plugin_name: 'YOUR_STRING_HERE'
|
驗證
GoogleAuth
是一種單例模式類別,可讓使用者透過多種方式登入 Google 帳戶、取得使用者目前的登入狀態、從使用者的 Google 個人資料中取得特定資料、要求其他範圍,以及登出目前帳戶。
gapi.auth2.getAuthInstance()
傳回 GoogleAuth
物件。您必須先使用 gapi.auth2.init()
初始化 GoogleAuth
物件,才能呼叫此方法。
傳回 | |
---|---|
gapi.auth2.GoogleAuth |
gapi.auth2.GoogleAuth 物件。使用這個物件呼叫 gapi.auth2.GoogleAuth 的方法。 |
GoogleAuth.isSignedIn.get()
傳回目前的使用者是否為登入狀態。
傳回 | |
---|---|
布林值 |
true (如果使用者已登入),或 false (如果使用者登出或 GoogleAuth 物件未初始化)。 |
GoogleAuth.isSignedIn.listen(listener)
監聽目前使用者登入狀態的變更。
引數 | |
---|---|
listener |
採用布林值的函式。listen() 會在使用者登入時將 true 傳遞至這個函式,並在使用者登出時傳遞 false 。 |
GoogleAuth.signIn()
透過 gapi.auth2.init()
指定的選項登入使用者。
傳回 | |
---|---|
保證 | 當使用者成功驗證並授予要求的範圍時,透過 GoogleUser 執行個體完成的 Promise ;如果發生錯誤,則會以包含 error 屬性的物件遭到拒絕 (請參閱下方錯誤代碼)。 |
錯誤代碼
查看《GoogleAuth.signIn(options)
》。
GoogleAuth.signIn(options)
使用指定選項登入使用者。
引數 | |
---|---|
options |
以下兩者之一:
|
傳回 | |
---|---|
保證 | 當使用者成功驗證並授予要求的範圍時,透過 GoogleUser 執行個體完成的 Promise ;如果發生錯誤,則會以包含 error 屬性的物件遭到拒絕 (請參閱下方錯誤代碼)。 |
錯誤代碼
popup_closed_by_user
- 使用者在完成登入流程前關閉彈出式視窗。
access_denied
- 使用者已拒絕授予所需範圍的權限。
immediate_failed
-
如未提示同意流程,就無法自動選取任何使用者。搭配
prompt: 'none'
選項使用signIn
時引發錯誤。您不一定要使用這個選項,因為如果您先前在上一個工作階段中登入,gapi.auth2.init
會自動登入使用者。
gapi.auth2.SignInOptions
代表 GoogleAuth.signIn(options)
方法不同設定參數的介面。
參數 | ||
---|---|---|
prompt |
string |
強制使用同意聲明流程的特定模式。選用。 可能的值包括:
|
scope |
string |
除了 gapi.auth2.init 參數中定義的範圍外,要求範圍以以空格分隔的字串表示。如果 fetch_basic_profile 未設為 false,則為選用元素。
|
ux_mode |
string |
登入流程使用的使用者體驗模式。根據預設,同意聲明流程會在彈出式視窗中開啟。有效值為 popup 和 redirect 。 |
redirect_uri |
string |
如果使用 ux_mode='redirect' ,這個參數可讓您覆寫同意聲明流程結束時會使用的預設 redirect_uri 。預設的 redirect_uri 是目前去除查詢參數和雜湊片段的網址。 |
GoogleAuth.signOut()
從應用程式登出目前的帳戶。
傳回 | |
---|---|
保證 | 在使用者登出時執行的 Promise 。 |
GoogleAuth.disconnect()
撤銷使用者授予的所有範圍。
GoogleAuth.grantOfflineAccess(options)
取得使用者許可,以離線方式存取指定範圍。
引數 | |
---|---|
options |
包含參數鍵/值組合的 gapi.auth2.OfflineAccessOptions 物件。例如: { scope: 'profile email' } |
傳回 | |
---|---|
保證 | 在使用者授予要求的範圍時執行的 Promise ,並將含有授權碼的物件傳遞至 Promise 的執行要求處理常式。例如: auth2.grantOfflineAccess().then(function(resp) { var auth_code = resp.code; }); |
錯誤代碼
popup_closed_by_user
- 使用者在完成同意聲明流程前關閉彈出式視窗。
access_denied
- 使用者已拒絕授予所需範圍的權限。
immediate_failed
-
如未提示同意流程,就無法自動選取任何使用者。搭配
prompt: 'none'
選項使用signIn
時引發錯誤。您不一定要使用這個選項,因為如果您先前在上一個工作階段中登入,gapi.auth2.init
會自動登入使用者。
gapi.auth2.OfflineAccessOptions
代表 GoogleAuth.grantOfflineAccess(options)
方法不同設定參數的介面。
參數 | ||
---|---|---|
prompt |
string |
強制使用同意聲明流程的特定模式。選用。 可能的值包括:
|
scope |
string |
除了 gapi.auth2.init 參數中定義的範圍外,要求範圍以以空格分隔的字串表示。如果 fetch_basic_profile 未設為 false,則為選用元素。
|
GoogleAuth.attachClickHandler(container, options, onsuccess, onfailure)
將登入流程附加至指定容器的點擊處理常式。
引數 | |
---|---|
container | 要附加點擊處理常式的 div 元素 ID 或參照。 |
options | 包含參數鍵/值組合的物件。請參閱 GoogleAuth.signIn()。 |
onsuccess | 登入完成後要呼叫的函式。 |
onfailure | 登入失敗時要呼叫的函式。 |
使用者
GoogleUser
物件代表一個使用者帳戶。GoogleUser
物件通常是透過呼叫 GoogleAuth.currentUser.get() 取得。
GoogleAuth.currentUser.get()
傳回代表目前使用者的 GoogleUser
物件。請注意,在新初始化的 GoogleAuth
例項中,尚未設定目前的使用者。使用 currentUser.listen()
方法或 GoogleAuth.then()
取得初始化的 GoogleAuth
執行個體。
傳回 | |
---|---|
GoogleUser |
目前使用者 |
GoogleAuth.currentUser.listen(listener)
監聽 currentUser 中的變更。
引數 | |
---|---|
listener |
採用 GoogleUser 參數的函式。listen 會在每次修改 currentUser 的變更時,傳遞此函式一個 GoogleUser 例項。 |
GoogleUser.getId()
取得使用者的專屬 ID 字串。
傳回 | |
---|---|
字串 | 使用者的專屬 ID |
GoogleUser.isSignedIn()
如果使用者已登入,系統會傳回 true。
傳回 | |
---|---|
布林值 | 如果使用者已登入,則為「是」 |
GoogleUser.getHostedDomain()
如果使用者透過 G Suite 帳戶登入,即可取得使用者的 G Suite 網域。
傳回 | |
---|---|
字串 | 使用者的 G Suite 網域 |
GoogleUser.getGrantedScopes()
取得使用者授予的範圍 (以空格分隔的字串)。
傳回 | |
---|---|
字串 | 使用者授予的範圍 |
GoogleUser.getBasicProfile()
取得使用者的基本個人資料資訊。
傳回 | |
---|---|
gapi.auth2.BasicProfile |
您可以使用下列方法擷取 gapi.auth2.BasicProfile 的屬性:
|
GoogleUser.getAuthResponse(includeAuthorizationData)
從使用者的驗證工作階段取得回應物件。
引數 | |
---|---|
includeAuthorizationData | 選用:指定是否一律傳回存取權杖和範圍的布林值。根據預設,當 fetch_basic_profile 為 true (預設值) 且未要求其他範圍時,系統不會傳回存取權杖和要求的範圍。 |
傳回 | |
---|---|
gapi.auth2.AuthResponse |
gapi.auth2.AuthResponse 物件。 |
GoogleUser.reloadAuthResponse()
強制更新存取權杖,然後為新的 AuthResponse 傳回 Promise。
傳回 | |
---|---|
Promise |
重新載入 OAuth 權杖時,透過重新載入的 gapi.auth2.AuthResponse 完成的 Promise 。 |
gapi.auth2.AuthResponse
呼叫 GoogleUser.getAuthResponse(includeAuthorizationData)
或 GoogleUser.reloadAuthResponse()
方法時傳回的回應。
屬性 | ||
---|---|---|
access_token |
string |
已授予存取權杖。 |
id_token |
string |
已授予的 ID 權杖。 |
scope |
string |
存取權杖授予的範圍。 |
expires_in |
number |
距離存取權杖過期的秒數。 |
first_issued_at |
number |
使用者首次授予要求範圍的時間戳記。 |
expires_at |
number |
存取權杖的到期時間。 |
GoogleUser.hasGrantedScopes(scopes)
如果使用者授予指定範圍,則傳回 true。
引數 | |
---|---|
scopes | 以空格分隔的字串。 |
傳回 | |
---|---|
布林值 | 如果授予範圍,則為「是」 |
GoogleUser.grant(options)
向使用者要求其他範圍。
如需參數清單和錯誤代碼,請參閱 GoogleAuth.signIn()
。
GoogleUser.grantOfflineAccess(options)
取得使用者許可,以離線方式存取指定範圍。
引數 | |
---|---|
options |
包含參數鍵/值組合的 gapi.auth2.OfflineAccessOptions 物件。例如: { scope: 'profile email' } |
GoogleUser.disconnect()
撤銷使用者為應用程式授予的所有範圍。
UI 元素
gapi.signin2.render(id, options)
使用 options 物件指定的設定,在具有指定 ID 的元素中算繪登入按鈕。
引數 | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
id | 要顯示登入按鈕的元素 ID。 | ||||||||||||||||
options |
包含顯示按鈕設定的物件。例如:
{ scope: 'email', width: 200, height: 50, longtitle: true, theme: 'dark', onsuccess: handleSuccess, onfailure: handleFailure }您可以指定下列選項:
|
進階
gapi.auth2.Authorize(params, callback)
執行一次性的 OAuth 2.0 授權。視使用的參數而定,這會開啟彈出式視窗至 Google 登入流程,或嘗試在無需使用者互動的情況下以無訊息方式載入要求的回應。
此方法實用的部分用途包括:
- 應用程式只需要求一個 Google API 端點一次,例如在使用者首次登入時載入喜愛的 YouTube 影片。
- 應用程式有自己的工作階段管理基礎架構,只需要 ID 符記一次即可在後端識別使用者。
- 同一個網頁中使用了多個用戶端 ID。
引數 | |
---|---|
params |
包含設定資料鍵/值組合的物件。如要瞭解其他可設定屬性的資訊,請參閱 gapi.auth2.AuthorizeConfig 。例如:
{ client_id: 'CLIENT_ID.apps.googleusercontent.com', scope: 'email profile openid', response_type: 'id_token permission' } |
callback |
要求完成 (成功或失敗) 後,使用 gapi.auth2.AuthorizeResponse 物件呼叫的函式。 |
範例
gapi.auth2.authorize({
client_id: 'CLIENT_ID.apps.googleusercontent.com',
scope: 'email profile openid',
response_type: 'id_token permission'
}, function(response) {
if (response.error) {
// An error happened!
return;
}
// The user authorized the application for the scopes requested.
var accessToken = response.access_token;
var idToken = response.id_token;
// You can also now use gapi.client to perform authenticated requests.
});
錯誤代碼
idpiframe_initialization_failed
- 例如,由於不支援的環境,因此無法從 Google 初始化必要的 iframe。
details
屬性會提供更多關於發生錯誤的資訊。 popup_closed_by_user
- 使用者在完成登入流程前關閉彈出式視窗。
access_denied
- 使用者已拒絕授予所需範圍的權限。
immediate_failed
-
如未提示同意流程,就無法自動選取任何使用者。搭配
prompt: 'none'
選項使用signIn
時引發錯誤。
gapi.auth2.AuthorizeConfig
代表 gapi.auth2.authorize
方法不同設定參數的介面。
屬性 | ||
---|---|---|
client_id |
string |
必填。應用程式的用戶端 ID (可在 Google Developers Console 中找到並建立)。 |
scope |
string |
必填。要求的範圍,以空格分隔的字串表示。 |
response_type |
string |
以空格分隔的回應類型清單。預設為 'permission' 。可能的值包括:
|
prompt |
string |
強制使用同意聲明流程的特定模式。可能的值包括:
|
cookie_policy |
string |
要建立登入 Cookie 的網域。URI、single_host_origin 或 none 皆可。如未指定,則預設值為 single_host_origin 。 |
hosted_domain |
string |
使用者必須所屬的 G Suite 網域才能登入帳戶。由於用戶端容易修改內容,因此請務必驗證傳回使用者的代管網域屬性。 |
login_hint |
string |
在登入流程中預先選取的使用者電子郵件或使用者 ID。除非使用 prompt: "none" ,否則很容易遭到使用者修改。 |
include_granted_scopes |
boolean |
要求存取權杖 (包含使用者先前授予應用程式的所有範圍),或僅要求目前呼叫中要求的範圍。這個變數預設為 true 。
|
enable_granular_consent |
boolean |
選用設定。是否要啟用精細權限。如果設為 false ,系統會停用 2019 年前建立的 OAuth 用戶端 ID 中更精細的 Google 帳戶權限。無論在 2019 年期間或之後建立的 OAuth 用戶端 ID,都不會受到任何影響,因為系統一律會為這類 ID 啟用更精細的權限。 |
plugin_name |
string |
選用設定。如有設定,2022 年 7 月 29 日前建立的用戶端 ID 就能使用 Google 平台資料庫。根據預設,新建的用戶端 ID 無法使用平台資料庫,請改用新版 Google Identity 服務程式庫。您可以選擇任何值,建議使用描述性名稱 (例如產品或外掛程式名稱),以便識別。
範例:plugin_name: 'YOUR_STRING_HERE'
|
gapi.auth2.AuthorizeResponse
針對 gapi.auth2.authorize
方法回呼的回應。
屬性 | ||
---|---|---|
access_token |
string |
已授予存取權杖。只有在 response_type 中指定 permission 或 token 時才會顯示。 |
id_token |
string |
已授予的 ID 權杖。只有在 response_type 中指定 id_token 時才會顯示。 |
code |
string |
已授予授權碼。只有在 response_type 中指定 code 時才會顯示。 |
scope |
string |
存取權杖授予的範圍。只有在 response_type 中指定 permission 或 token 時才會顯示。 |
expires_in |
number |
距離存取權杖過期的秒數。只有在 response_type 中指定 permission 或 token 時才會顯示。 |
first_issued_at |
number |
使用者首次授予要求範圍的時間戳記。只有在 response_type 中指定 permission 或 token 時才會顯示。 |
expires_at |
number |
存取權杖的到期時間。只有在 response_type 中指定 permission 或 token 時才會顯示。 |
error |
string |
要求失敗時會包含錯誤代碼。 |
error_subtype |
string |
要求失敗時,這可以包含傳回的錯誤代碼的其他資訊。 |