IdentityProvider:getUserInfo() 静态方法
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)
参数
返回值
异常
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 的浏览器中加载。
另请参阅
- 联合凭据管理 API 在 developers.google.com 上 (2023)