跳到主要内容

Profile Claim

Profile Claim 用于向用户的 DID Wallet 请求个人信息。这是许多应用程序的基础步骤,通过在用户明确同意的情况下安全地获取用户数据,从而实现用户注册、个性化体验和通信等功能。

结构

profile 声明对象配置有以下参数:

参数类型描述
descriptionstring必需。在用户的钱包中显示给用户的消息,解释为什么请求他们的个人资料信息。例如,“请提供您的个人资料以创建账户。”
itemsstring[]一个指定要请求的个人资料字段的数组。默认为 ['fullName']。有关所有选项,请参见下方的“可用个人资料字段”表。关键字 fields 也可以用作 items 的别名。
metaany可选。您希望与声明关联的任何自定义元数据。这不会发送到钱包,但可以在您的应用程序逻辑中使用。

可用的个人资料字段

您可以在 items 数组中请求以下字段的任意组合:

字段描述
did用户的去中心化身份标识符。
fullName用户的全名。
email用户的电子邮件地址。
phone用户的电话号码。
signature证明 DID 所有权的签名。
avatar用户头像图片的 URL。
birthday用户的出生日期。
url用户个人网站或个人资料的 URL。

示例:请求用户名和电子邮件

以下是如何配置 DID Connect 处理程序以请求用户的全名和电子邮件地址。这是简单登录或注册流程的常见模式。

DID Connect Handler

javascript
const { WalletHandlers } = require('@arcblock/did-connect');

const handlers = new WalletHandlers({
  authenticator,
  // ... 其他配置
});

app.get('/api/auth/login', handlers.createAuthUrl({
  claims: {
    profile: {
      description: '请提供您的姓名和电子邮件以进行注册。',
      items: ['fullName', 'email'],
    }
  },
  onAuth: async ({ userDid, userPk, claims }) => {
    // 'claims' 数组将包含用户的个人资料数据
    const profileData = claims.find(c => c.type === 'profile');
    console.log('User DID:', userDid);
    console.log('Profile Data:', profileData);

    // TODO:使用提供的信息在数据库中查找或创建用户
  }
}));

在此示例中:

  1. 我们在 claims 对象中定义了一个 profile 声明。
  2. description 在用户的钱包中为用户提供上下文。
  3. items 数组指定我们需要 fullName 和 email。
  4. onAuth 回调接收钱包的响应,其中包含一个含有被请求的个人资料信息的 claims 数组。

钱包响应

用户在其 DID Wallet 中批准请求后,您的 onAuth 回调将收到一个包含所请求数据的有效负载。claims 数组将持有一个类型为 profile 的对象,其中包含用户信息。

Wallet Response Example

json
{
  "userDid": "z8ia29UsENBg6tLZUKi2HABj38Cw1LmHZocbQ",
  "userPk": "...",
  "claims": [
    {
      "type": "profile",
      "fullName": "Alice",
      "email": "alice@example.com",
      "meta": {}
    }
  ],
  "challenge": "...",
  "status": "ok"
}

然后,您的应用程序可以使用这些数据来配置账户、个性化用户体验或根据需要执行其他操作。

后续步骤

在使用个人资料声明识别用户后,您可能需要为安全敏感操作验证他们对 DID 的控制权。 Signature Claim 是实现此目的的完美工具。