IdentityProvider:getUserInfo() 静态方法

实验性: 这是一个 实验性技术
在生产环境中使用之前,请仔细查看 浏览器兼容性表

安全上下文:此功能仅在 安全上下文(HTTPS)中可用,且仅在某些或所有 支持的浏览器 中可用。

IdentityProvider 接口的 getUserInfo() 静态方法返回已登录用户的相关信息,可用于提供个性化的欢迎消息和登录按钮。此方法必须从身份提供者 (IdP) 原点 <iframe> 内调用,以便 RP 脚本无法访问数据。这必须在用户登录到依赖方 (RP) 站点后发生。

此模式在使用身份联合进行登录的站点上已经很常见,但 getUserInfo() 提供了一种无需依赖 第三方 Cookie 即可实现此目的的方法。

使用说明

当调用 getUserInfo() 时,浏览器将向 IdP 帐户列表端点 发出请求以获取用户信息,前提是以下两个条件都为真

  • 用户之前已通过 FedCM 在同一浏览器实例中使用 IdP 登录到 RP,并且数据未被清除。
  • 用户已在同一浏览器实例中登录到 IdP。

getUserInfo() 必须从嵌入的 <iframe> 内调用,并且嵌入站点的原点必须与 IdP 的 configURL 匹配。此外,嵌入的 HTML 必须通过 identity-credentials-get Permissions-Policy 明确允许其使用。

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

语法

js
IdentityProvider.getUserInfo(config)

参数

config

一个配置对象,可以包含以下属性

configURL

您要从中获取用户信息的身份提供者的 配置文件 的 URL。

clientId

IdP 发行的 RP 的客户端标识符。

返回值

一个 Promise,它会返回一个包含对象的数组,每个对象都包含表示单独用户帐户的信息。每个对象包含以下属性

email

表示用户电子邮件地址的字符串。

name

表示用户全名的字符串。

givenName

表示用户给定(昵称或缩写)名称的字符串。

picture

表示用户个人资料图片 URL 的字符串。

异常

InvalidStateError DOMException

如果提供的 configURL 无效或嵌入文档的原点与 configURL 不匹配,则抛出此异常。

NetworkError DOMException

如果浏览器无法连接到 IdP 或 getUserInfo() 从顶级文档中调用,则抛出此异常。

NotAllowedError DOMException

如果嵌入的 <iframe> 没有将 identity-credentials-get Permissions-Policy 设置为允许使用 getUserInfo(),或者如果 FedCM API 被顶级文档上设置的策略全局禁用,则抛出此异常。

示例

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

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

  // ...

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

规范

规范
联合凭据管理 API
# dom-identityprovider-getuserinfo

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅