PublicKeyCredential:signalCurrentUserDetails() 静态方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

PublicKeyCredential 接口的 signalCurrentUserDetails() 静态方法会通知认证器,某个用户已在 信誉方 (RP) 服务器上更新了其用户名和/或显示名称。

这允许认证器更新用户账户的详细信息,以确保它们与 RP 所持有的信息保持同步。此方法仅应在当前用户已通过身份验证时使用 — 登录后,或者当他们在 RP Web 应用上更改与其凭证关联的元数据时使用。

语法

js
signalCurrentUserDetails(options)

参数

options

一个代表已更新用户信息的对象,其中包含以下属性:

displayName

一个代表已更新用户 displayName 的字符串。

name

一个代表已更新用户 name 的字符串。

rpId

一个字符串,表示发送信号的 RP 的 ID

userId

一个 base64url 编码的字符串,代表了凭证关联的 用户 id

返回值

一个 Promise,解析为 undefined

异常

Promise 会因以下异常而拒绝

SecurityError DOMException

RP 域无效。

TypeError DOMException

credentialId 不是一个有效的 base64url 编码字符串。

描述

用户认证器中存储的有关 可发现凭证(例如,passkey)的信息可能与 RP 服务器不同步。当用户在 RP Web 应用上更新其用户名或显示名称但未更新认证器时,可能会发生这种情况。

下次他们尝试使用可发现凭证登录时,凭证仍会以旧的用户名/显示名称出现在相关 UI 中,这可能会导致令人困惑的用户体验。

为避免此问题,每次用户更新其用户账户详细信息或登录时,RP Web 应用都应调用 signalCurrentUserDetails(),告知认证器用户信息已更新。认证器如何处理此信息由其自行决定,但预期它会与其提供的更新同步其用户信息。

示例

通知当前用户详细信息

在此示例中,我们调用 signalCurrentUserDetail() 方法,并将用户刚刚在 RP 上编辑的凭证的详细信息传递给它。因此,认证器应更新其自身的凭证副本,以保持与 RP 的同步。

js
if (PublicKeyCredential.signalCurrentUserDetails) {
  await PublicKeyCredential.signalCurrentUserDetails({
    rpId: "example.com",
    userId: "M2YPl-KGnA8", // base64url-encoded user ID
    name: "a.new.email.address@example.com", // username
    displayName: "Maria Sanchez",
  });
} else {
  // Encourage the user to update their details in the authenticator
}

有关更多代码示例,请参阅 developer.chrome.com 上的 使用 Signal API 使 passkey 与服务器上的凭证保持一致 (2024)。

规范

规范
Web Authentication:访问公钥凭证的 API - 第 3 级
# dom-publickeycredential-signalcurrentuserdetails

浏览器兼容性

另见