首页 > 解决方案 > 超级账本结构:不能注册多个用户

问题描述

我正在开发一个基于余额转移示例的超级账本结构应用程序,该应用程序目前停留在注册用户中。我有一些组织,例如银行,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”将在控制台中打印两次。所以在这种情况下,那里的线路将不止一次运行。

标签: hyperledger-fabrichyperledgerblockchain

解决方案


我没有阅读/理解所有代码,但可能有帮助的是记录另一边发生的事情。因此,请查看 ca 的日志,看看那里发生了什么故障。也可能只是拼写问题。


推荐阅读