跳到主要内容

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 数组指定我们需要 fullNameemail
  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 是实现此目的的完美工具。