Profile Claim 用于向用户的 DID Wallet 请求个人信息。这是许多应用程序的基础步骤,通过在用户明确同意的情况下安全地获取用户数据,从而实现用户注册、个性化体验和通信等功能。
结构
profile 声明对象配置有以下参数:
| 参数 | 类型 | 描述 |
|---|---|---|
description | string | 必需。在用户的钱包中显示给用户的消息,解释为什么请求他们的个人资料信息。例如,“请提供您的个人资料以创建账户。” |
items | string[] | 一个指定要请求的个人资料字段的数组。默认为 ['fullName']。有关所有选项,请参见下方的“可用个人资料字段”表。关键字 fields 也可以用作 items 的别名。 |
meta | any | 可选。您希望与声明关联的任何自定义元数据。这不会发送到钱包,但可以在您的应用程序逻辑中使用。 |
可用的个人资料字段
您可以在 items 数组中请求以下字段的任意组合:
| 字段 | 描述 |
|---|---|
did | 用户的去中心化身份标识符。 |
fullName | 用户的全名。 |
email | 用户的电子邮件地址。 |
phone | 用户的电话号码。 |
signature | 证明 DID 所有权的签名。 |
avatar | 用户头像图片的 URL。 |
birthday | 用户的出生日期。 |
url | 用户个人网站或个人资料的 URL。 |
示例:请求用户名和电子邮件
以下是如何配置 DID Connect 处理程序以请求用户的全名和电子邮件地址。这是简单登录或注册流程的常见模式。
DID Connect Handler
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:使用提供的信息在数据库中查找或创建用户
}
}));在此示例中:
- 我们在
claims对象中定义了一个profile声明。 description在用户的钱包中为用户提供上下文。items数组指定我们需要fullName和email。onAuth回调接收钱包的响应,其中包含一个含有被请求的个人资料信息的claims数组。
钱包响应
用户在其 DID Wallet 中批准请求后,您的 onAuth 回调将收到一个包含所请求数据的有效负载。claims 数组将持有一个类型为 profile 的对象,其中包含用户信息。
Wallet Response Example
{
"userDid": "z8ia29UsENBg6tLZUKi2HABj38Cw1LmHZocbQ",
"userPk": "...",
"claims": [
{
"type": "profile",
"fullName": "Alice",
"email": "alice@example.com",
"meta": {}
}
],
"challenge": "...",
"status": "ok"
}然后,您的应用程序可以使用这些数据来配置账户、个性化用户体验或根据需要执行其他操作。
后续步骤
在使用个人资料声明识别用户后,您可能需要为安全敏感操作验证他们对 DID 的控制权。 Signature Claim 是实现此目的的完美工具。