IdentityProvider:getUserInfo() 靜態方法

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

IdentityProvider 介面的 getUserInfo() 靜態方法返回已登入使用者的資訊,可用於提供個性化的歡迎訊息和登入按鈕。此方法必須從 IdentityProvider 源的 <iframe> 中呼叫,這樣 信賴方 (RP) 指令碼就無法訪問該資料。這必須在使用者登入到 RP 網站後發生。

這種模式在使用身份聯合進行登入的網站上已經很常見,但 getUserInfo() 提供了一種無需依賴 第三方 Cookie 即可實現此目的的方法。

語法

js
IdentityProvider.getUserInfo(config)

引數

config

一個配置物件,其中可以包含以下屬性

configURL

要從中獲取使用者資訊的身份提供程式的 配置檔案的 URL。

clientId

IdP 發行的 RP 的客戶端識別符號。

返回值

一個 Promise,該 Promise 會解析為一個物件陣列,每個物件都包含表示單獨使用者帳戶的資訊。每個物件都包含以下屬性

電子郵件

表示使用者電子郵件地址的字串。

name

表示使用者全名的字串。

givenName

表示使用者名稱字(暱稱或縮寫名)的字串。

picture

表示使用者個人資料圖片的 URL 的字串。

異常

InvalidStateError DOMException

如果提供的 configURL 無效,或者嵌入文件的原點與 configURL 不匹配,則丟擲此異常。

NetworkError DOMException

如果瀏覽器無法連線到 IdP,或者 getUserInfo() 是從頂層文件呼叫的,則丟擲此異常。

NotAllowedError DOMException

如果嵌入的 <iframe> 沒有設定 identity-credentials-get Permissions-Policy 來允許使用 getUserInfo(),或者 FedCM API 被頂層文件上的策略全域性停用,則丟擲此異常。

描述

當呼叫 getUserInfo() 時,只有在以下兩個條件都滿足時,瀏覽器才會向指定的 IdP 的 帳戶列表端點發出請求以獲取使用者資訊

  • 使用者已透過 FedCM 在同一瀏覽器例項中登入到 RP,且資料未被清除。
  • 使用者已在同一瀏覽器例項中登入到 IdP。

getUserInfo() 必須從嵌入的 <iframe> 中呼叫,並且嵌入站點的原點必須與 IdP 的 configURL 匹配。此外,嵌入的 HTML 必須透過 identity-credentials-get Permissions-Policy 明確允許其使用。

html
<iframe
  src="https://idp.example/signin"
  allow="identity-credentials-get"></iframe>

示例

基本 IdentityProvider.getUserInfo() 用法

以下示例演示瞭如何使用 IdentityProvider.getUserInfo() 方法從特定 IdP 返回之前登入過的使用者的資訊。

js
// Iframe displaying a page from the https://idp.example origin
const userInfo = await IdentityProvider.getUserInfo({
  configURL: "https://idp.example/fedcm.json",
  clientId: "client1234",
});

// IdentityProvider.getUserInfo() returns an array of user information.
if (userInfo.length > 0) {
  // Returning accounts should be first, so the first account received
  // is guaranteed to be a returning account
  const name = userInfo[0].name;
  const givenName = userInfo[0].given_name;
  const displayName = givenName || name;
  const picture = userInfo[0].picture;
  const email = userInfo[0].email;

  // …

  // Render the personalized sign-in button using the information above
}

規範

規範
Federated Credential Management API
# dom-identityprovider-getuserinfo

瀏覽器相容性

另見