hyperledger-fabric - 超级账本结构:不能注册多个用户
问题描述
我正在开发一个基于余额转移示例的超级账本结构应用程序,该应用程序目前停留在注册用户中。我有一些组织,例如银行,caseManager ......起初是没有隶属关系(我添加的一些组织)抛出错误消息,但是在我添加了一些行来创建隶属关系之后,出现了一些奇怪的消息...... .. 我只被允许注册一个用户。如果我尝试注册更多,它会显示:
[ERROR] Helper - Failed to get registered user: userABC with error: Error: Enrollment failed with errors [[{"code":0,"message":"2 rows were affected when updating the state of identity userABC"}]]
我一直在寻找这么久,仍然找不到这个答案。请帮忙!!!
代码:
var registerUser = async function (params) {
try {
var userOrg = params.userOrg;
var org = params.org;
var username = params.username;
var client = await getClientForOrg(userOrg, username, true);
logger.debug('Successfully initialized the credential stores');
var user = await client.getUserContext(username, true);
if (user && user.isEnrolled()) {
logger.info('Successfully loaded member from persistence');
} else {
logger.info('User %s was not enrolled, so we will need an admin user object to register', username);
var admins = hfc.getConfigSetting('admins');
let adminUserObj = await client.setUserContext({ username: admins[0].username, password: admins[0].secret });
let caClient = client.getCertificateAuthority();
let affiliationService = caClient.newAffiliationService();
console.log("passed 1");
let registeredAffiliations = await affiliationService.getAll(adminUserObj);
console.log("passed 2");
if (!registeredAffiliations.result.affiliations.some(
x => x.name == org)) {
let affiliation = org + '.department1';
await affiliationService.create({
name: affiliation,
force: true
}, adminUserObj);
}
console.log("passed 3");
let secret = await caClient.register({
enrollmentID: username,
role: 'user',
affiliation: org + '.department1'
}, adminUserObj);
console.log("passed 4");
logger.debug('Successfully got the secret for user %s: %s', username, secret);
user = await client.setUserContext({ username: username, password: secret });
user.setRoles(['client']);
user._enrollmentSecret = secret.toString();
user = await client.setUserContext(user);
logger.debug('Successfully enrolled username %s and setUserContext on the client object', username);
}
if (user && user.isEnrolled) {
var response = {
success: true,
secret: user._enrollmentSecret,
message: username + ' enrolled Successfully in ' + userOrg,
};
console.log(response);
return response;
} else {
throw new Error('User was not enrolled ');
}
} catch (error) {
logger.error('Failed to get registered user: %s with error: %s', username, error.toString());
return 'failed: ' + error.toString();
}
};
我注意到的一件事是,如果注册/注册不会成功,则调试行“通过 2”和“通过 3”将在控制台中打印两次。所以在这种情况下,那里的线路将不止一次运行。
解决方案
我没有阅读/理解所有代码,但可能有帮助的是记录另一边发生的事情。因此,请查看 ca 的日志,看看那里发生了什么故障。也可能只是拼写问题。
推荐阅读
- javascript - 在函数中调用函数
- debugging - 调试 nasm 应用程序时,GDB 偏离了一行
- c++ - LLVM 错误:内存不足??如何修复此错误(如果可修复)
- javascript - TypeError:无法在“窗口”上执行“获取”:使用 GET/HEAD 方法的请求不能有正文
- arrays - 如何在 perl 中完成这个字节转换?
- java - Java Swing 表单之间的数据传输
- vb.net - 使用事件处理程序时不断出错,语法错误
- c++ - 尝试使用 C++ 插件调用节点 js 回调时崩溃
- c# - 无法加载,因为已经加载了具有相同文件的另一个 AssetBundle。加载不同的捆绑包时出错
- julia - 使用条件评估 (&&) 进行过滤