我构建了一个hyperledger-composer应用程序(有角前端,连接到composer-rest-server),到目前为止,该应用程序缺少身份验证。
我很难弄清楚如何实现身份验证。
即使第一步也没有用。据我从文档中了解到,实施身份验证的第一步是为网络中的每个参与者颁发身份。
我创建了一个最小的示例,它说明了我目前遇到的问题。
这是此最小示例网络的model.cto文件:
namespace org.comp.network
participant SampleParticipant identified by participantId {
o String participantId
o String firstName
o String lastName
}
transaction IssueID {
--> SampleParticipant participant
o String identity
}
这是logic.js文件:
'use strict';
/**
* Sample transaction
* @param {org.comp.network.IssueID} issueID
* @transaction
*/
async function issueID(tx) {
let ID = tx.participant.participantId;
let p = 'org.comp.network.SampleParticipant#' + ID;
let IDENTITY = tx.identity;
await issueIdentity(p, IDENTITY);
}
功能“ issueIdentity”应该为给定的参与者颁发身份(请参见https://hyperledger.github.io/composer/latest/managing/identity-issue.html)
但是,在提交事务“ issueID”时,出现以下错误消息:
显然,函数“ issueIdentity”不是“已知”(尽管在文档中使用了https://hyperledger.github.io/composer/latest/managing/identity-issue)
如何构建一个交易处理器功能来为网络中的参与者发布身份?
答案 0 :(得分:0)
关于您上面的示例的一些观察结果...
您遇到的ReferenceError是因为用@param
装饰器定义的参数是 issueID ,但是您为函数声明的参数是 tx 。如果将装饰器行更改为:
* @param {org.comp.network.IssueID} tx
然后解决ReferenceError。
我看到的第二个问题是运行时API(事务使用的)不包含issueIdentity方法。 issueIdentity 是 BusinessNetworkConnection 类的一种方法,属于客户端Api,而不是运行时API。
为了向现有参与者颁发身份,您不能使用事务逻辑,您将需要编写单独的Javascript API程序,或者使用REST API或命令行。