使用 ejabberd 将 nick 字段添加到注册新的 xmpp 用户名

Posted

技术标签:

【中文标题】使用 ejabberd 将 nick 字段添加到注册新的 xmpp 用户名【英文标题】:Adding nick field to registration new xmpp username using ejabberd 【发布时间】:2018-06-05 11:09:37 【问题描述】:

我想从客户端发送“昵称”字段以在乐队注册中使用 ejabberd 注册新用户名。但服务器仅将用户名、密码和说明字段发送回客户端进行填写。我检查了下面的 mod_register 来修改这些字段,但没有提供可用的。

https://docs.ejabberd.im/admin/configuration/#mod-register

2018-05-29 23:01:08.426 [debug] <0.4613.3>@xmpp_socket:send:218 (tls|<0.4613.3>) Send XML on stream = <<"
<iq xml:lang='en' from='xmpp.test.in' type='result' id='mCbQBXKp-Sd4'>
    <query xmlns='jabber:iq:register'>
        <username/>
        <password/>
        <instructions>Choose a username and password to register with this server</instructions>
    </query>
</iq>">>

谁能帮助我如何让昵称包含在注册本身中?

【问题讨论】:

【参考方案1】:

如果您使用 android 的 Smack 客户端,您可以在 createAccount 方法中发送其他属性,例如:

public void signup(String user, String password, String nickname) throws SmackInvocationException 
    connect();

    Map<String, String> attributes = new HashMap<String, String>();
    attributes.put("name", nickname);
    try 
        AccountManager.getInstance(con).createAccount(user, password, attributes);
     catch (Exception e) 
        throw new SmackInvocationException(e);
    

另一种方法是将 Vcard 与 VcardManager 一起使用,并在 smack 中设置昵称(登录或注册后):

    private Context context;
    private XMPPConnection con;

    public SmackVCardHelper(Context context, XMPPConnection con) 
        this.context = context;
        this.con = con;
    

    public void save(String nickname) throws SmackInvocationException 
        VCard vCard = VCardManager.getInstanceFor(connection).loadVCard();

        try 
            vCard.setNickName(nickname);
            vCard.saveVCard(vcard);
         catch (Exception e) 
            throw new SmackInvocationException(e);
        
    

【讨论】:

以上是关于使用 ejabberd 将 nick 字段添加到注册新的 xmpp 用户名的主要内容,如果未能解决你的问题,请参考以下文章

Ejabberd 如何将新用户添加到名册

为 ejabberd STUN 添加 DNS 记录

将动态主管添加到 ejabberd

ejabberd:使用 ejabberdctl 操作书签

如何将新模块添加到通过ejabberd编写的MongooseIm聊天服务器上

将 iOS 应用程序连接到 Amazon 上托管的 Ejabberd 服务器