IdentityProvider:getUserInfo() 静态方法
IdentityProvider 接口的 getUserInfo() 静态方法返回已登录用户的信息,可用于提供个性化的欢迎消息和登录按钮。此方法必须从 IdentityProvider 源的 <iframe> 中调用,这样 信赖方 (RP) 脚本就无法访问该数据。这必须在用户登录到 RP 网站后发生。
这种模式在使用身份联合进行登录的网站上已经很常见,但 getUserInfo() 提供了一种无需依赖 第三方 Cookie 即可实现此目的的方法。
语法
IdentityProvider.getUserInfo(config)
参数
返回值
一个 Promise,该 Promise 会解析为一个对象数组,每个对象都包含表示单独用户帐户的信息。每个对象都包含以下属性
异常
InvalidStateErrorDOMException-
如果提供的
configURL无效,或者嵌入文档的原点与configURL不匹配,则抛出此异常。 NetworkErrorDOMException-
如果浏览器无法连接到 IdP,或者
getUserInfo()是从顶层文档调用的,则抛出此异常。 NotAllowedErrorDOMException-
如果嵌入的
<iframe>没有设置identity-credentials-getPermissions-Policy 来允许使用getUserInfo(),或者 FedCM API 被顶层文档上的策略全局禁用,则抛出此异常。
描述
当调用 getUserInfo() 时,只有在以下两个条件都满足时,浏览器才会向指定的 IdP 的 帐户列表端点发出请求以获取用户信息
- 用户已通过 FedCM 在同一浏览器实例中登录到 RP,且数据未被清除。
- 用户已在同一浏览器实例中登录到 IdP。
getUserInfo() 必须从嵌入的 <iframe> 中调用,并且嵌入站点的原点必须与 IdP 的 configURL 匹配。此外,嵌入的 HTML 必须通过 identity-credentials-get Permissions-Policy 明确允许其使用。
<iframe
src="https://idp.example/signin"
allow="identity-credentials-get"></iframe>
示例
基本 IdentityProvider.getUserInfo() 用法
以下示例演示了如何使用 IdentityProvider.getUserInfo() 方法从特定 IdP 返回之前登录过的用户的信息。
// 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 |
浏览器兼容性
加载中…
另见
- Federated Credential Management API on privacysandbox.google.com (2023)