【问题标题】:Creating new user with Smack 4.2.0-beta1 on ejabberd throws XMPP Exception: forbidden - auth在 ejabberd 上使用 Smack 4.2.0-beta1 创建新用户会引发 XMPP 异常:禁止 - 身份验证
【发布时间】:2016-12-07 16:20:46
【问题描述】:

我正在使用 smack 进行聊天应用程序。我是这项技术的新手。

我从 Ejabberd 服务器创建了一些手动用户。我使用这些用户进行了一对一聊天和群聊。

但我尝试从 android 代码创建新用户 但我得到了以下错误

 XMPPError: forbidden - auth
    08-02 08:23:36.273 31097-31097/com.agarangroup.hello W/System.err:     at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:232)
    08-02 08:23:36.273 31097-31097/com.agarangroup.hello W/System.err:     at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:207)

这是我在 ejabberd 服务器中的配置

announce    [{allow,[{acl,admin}]}]
c2s [{deny,[{acl,blocked}]},{allow,[{acl,all}]}]
c2s_shaper  [{none,[{acl,admin}]},{normal,[all]}]
configure   [{allow,[{acl,admin}]}]
local   [{allow,[{acl,all}]}]
max_user_offline_messages   [{5000,[{acl,admin}]},{100,[all]}]
max_user_sessions   [{10,[all]}]
muc_create  [{allow,[{acl,all}]}]
pubsub_createnode   [{allow,[{acl,local}]}]
register    [{allow,[{acl,all}]}]
s2s_shaper  [{fast,[all]}]
trusted_network [{allow,[{acl,loopback}]}]

更新:

我正在这里初始化我的连接

 private void initialiseConnection() {
        DomainBareJid serviceName = null;
        try {
            serviceName = JidCreate.domainBareFrom(ServiceAddress);
        } catch (XmppStringprepException e) {
            e.printStackTrace();
        }
        XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration
                .builder().setKeystoreType(null);
        // XMPPTCPConnectionConfiguration.builder().setKeystoreType(null);

        config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
        config.setServiceName(serviceName);
        config.setHost(serverAddress);
        config.setPort(5222);
        config.setDebuggerEnabled(true);
        XMPPTCPConnection.setUseStreamManagementDefault(true);
        connection = new XMPPTCPConnection(config.build());
        XMPPConnectionListener connectionListener = new XMPPConnectionListener();
        connection.addConnectionListener(connectionListener);
    }

我在初始化后连接这个连接

 connection.connect();
                    DeliveryReceiptManager dm = DeliveryReceiptManager
                            .getInstanceFor(connection);
                    dm.setAutoReceiptMode(AutoReceiptMode.always);
                    dm.addReceiptReceivedListener(new ReceiptReceivedListener() {
                        @Override
                        public void onReceiptReceived(Jid fromJid, Jid toJid, String receiptId, Stanza receipt) {

                        }
                    });
                    connected = true;

创建新用户的方法

public void createNewUser(){
        try {
           /* UserRegisterUtil.registerAccount(connection,"Mathan","mathan@4792");
            connection.disconnect();
            connection.connect();*/
           Localpart lp = Localpart.from("IamHere");
            // Registering the user
            AccountManager accountManager = AccountManager.getInstance(connection);
            accountManager.sensitiveOperationOverInsecureConnection(true);
            accountManager.createAccount(lp, "mathan123"); // Skipping optional fields like email, first name, last name, etc..
            Toast.makeText(context, "=>User creation completed....",
                    Toast.LENGTH_LONG).show();
            Log.d("xmpp", ">User creation completed....!");
        } catch (SmackException.NoResponseException e) {
            e.printStackTrace();
        } catch (XMPPException.XMPPErrorException e) {
            e.printStackTrace();
        } catch (NotConnectedException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (XMPPException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SmackException e) {
            e.printStackTrace();
        }
    }

这是我收到的错误,它显示被 ACL 拒绝。但我不知道如何在 windows ejabberd 服务器中更改它。

  <error code='403' type='auth'><forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/><text xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>Denied by ACL</text></error> 

谁能告诉我如何创建一个新用户,我想在这个配置文件中改变什么?

我也有些疑惑

如何使用 smack 库在 android 中获取离线消息?

如何获取聊天记录?

【问题讨论】:

    标签: android xmpp ejabberd smack


    【解决方案1】:
    1. 转到/etc/ejabberd/ejabberd.yml

    2. 几乎在文件末尾,在Section modules 下,将mod_register:ip_access:trusted_network 更改为mod_register:ip_access:all

    【讨论】:

    • stackoverflow 的新手。打字时使用了不同的行,但一切都在单行上。 “//几乎在文件末尾”是注释
    • 欢迎来到 stackOverflow :-)
    【解决方案2】:

    关于用户创建:您需要先连接(而不是登录)您的连接

    更多,所有用户名必须小写:

     accountManager.createAccount(lp.toLowerCase(), "mathan123");
    


    关于离线消息:在用户上线时发送

    关于聊天记录:抱歉,我没有使用 Ejabber 的经验,但对于普通的 1vs1 聊天,您可能需要在客户端存储或在服务器上添加一些自定义功能(如 Openfire)。

    【讨论】:

    • 我已经连接到服务器了。另外,我用小写字母更改了用户名,但它仍然表示相同。 :(
    • 这听起来更像是 Ejabber + ACL (LDAP?) 问题,但是当您连接到服务器时阅读该部分可能会很有趣
    • 代码看起来不错,但我将用户名标记为小写。 Ejabber 配置可能至少有一个错误,必须是:(register, [{allow,,all}]) -> 查看本指南:ejabberd.im/files/doc/guide.html
    • 我已将用户名更改为小写。是的
    猜你喜欢
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 2023-03-12
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多