如何使用Smack Client在Ejabberd中的特定虚拟主机中注册带内用户?

时间:2019-06-11 15:09:20

标签: ejabberd smack ejabberd-api

我正在使用Smack客户端4.3.1,并希望使用带内注册方法(使用Smack的AccountManager)注册用户。

我可以通过“管理员” XMPP连接创建新用户,并且在管理员用户所在的域中创建用户,例如user1@ec2-xxxxx.us-west-2.compute.amazonaws.com

我的要求是,我想在另一个虚拟主机中创建用户-使用相同的“管理员” XMPP连接说user1@example.com。可能吗 ?

我尝试使用具有管理员权限的用户“ mnallath1@example.com”进行“带内注册”。它给出了“ XMPPError:冲突-取消”错误

我的代码是:

    AccountManager accountManager = AccountManager.getInstance(connection1);
    System.out.println("Is Account creation supported " +accountManager.isSupported() + " Account creation supported : " + accountManager.supportsAccountCreation());
    accountManager.sensitiveOperationOverInsecureConnection(true);

    EntityFullJid entityFullJid = JidCreate.entityFullFrom("user1@example.com/resource1");

    Domainpart domainpart = entityFullJid.getDomain();

    Localpart localpart = entityFullJid.getLocalpart();

    System.out.println("local part of account " + localpart);

    accountManager.createAccount(localpart, "password");

是否可以使用带内注册在example.com中创建user1?

我的管理员用户

  admin:
    user:
      - "admin": "ec2-xxxxx.us-west-2.compute.amazonaws.com"
      - "mnallath1": "example.com"

我的虚拟主机

hosts:
  - "ec2-xxxxx.us-west-2.compute.amazonaws.com"
  - "example.com"
  - "example.net"

1 个答案:

答案 0 :(得分:1)

通过查看源代码,现在可以使用IBR从另一个虚拟主机注册新帐户,即使使用管理员帐户也是如此。

函数check_from返回deny,因为使用的帐户不属于尝试注册的虚拟主机: https://github.com/processone/ejabberd/blob/master/src/mod_register.erl#L260

相关问题