请求多个步骤
类似于 请求多个声明,您可以在一次 DID Connect 中完成多个签名操作,不过这与之前的功能有所不同,请参阅本文以了解如何在 DID Connect 中执行多步操作。
基本过程与“快速入门”章节保持一致,请按以下方式修改处理程序中的代码:
const { fromBase58, toBase58 } = require('@ocap/util');
const { getHasher, types } = require('@ocap/mcrypto');
const { getRandomMessage } = require('../../libs/utils');
const logger = require('../../libs/logger');
const hasher = getHasher(types.HashType.SHA3);
const data = 'abcdefghijklmnopqrstuvwxyz'.repeat(32);
const action = 'request-multiple-steps';
module.exports = {
action,
onConnect() {
return [
{
signature: () => {
return {
type: 'mime:text/plain',
data: getRandomMessage(),
description: 'Please sign the text',
};
},
},
{
signature: () => {
return {
description: 'Please sign the digest',
digest: toBase58(hasher(data, 1)),
};
},
},
];
},
onAuth: ({ userDid, userPk, claims, step, req, updateSession }) => {
logger.info(`${action}.onAuth`, { step, userPk, userDid, claims });
const result = req?.context?.store?.result || [];
const claim = claims.find((x) => x.type === 'signature');
if (step === 1) {
result.push({
step,
origin: fromBase58(claim.origin).toString(),
sig: claim.sig,
});
} else if (step === 2) {
result.push({
step,
origin: data,
digest: claim.digest,
sig: claim.sig,
});
}
updateSession({
result,
});
},
};
onConnect
字段必须返回一个数组- 在 DID Connect 过程中不会看到 Prev 按钮,因为每个声明项目都是独立的
onAuth
回调函数会被多次调用,这意味着你可以获取从先前的 DID Connect 获取的结果,这是与 请求多个声明 的最大区别。
将前端部分调用 DID Connect 的代码更改为以下内容:
connectApi.open({
locale: 'en',
action: 'request-multiple-steps',
onSuccess({ result }) {
// multi claims data will be in result, result would be an array
},
messages: {
title: 'Request Multiple Steps',
scan: 'In this session, you will do a text signature followed by a summary signature',
},
});