我正在开发一个基于余额转移示例的超级分层结构应用程序,该应用程序目前停留在注册用户。我有一些组织,例如bank,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的日志,看看那里失败了。也可能只是一个拼写问题。