如何在不登录的情况下注册新用户?

Posted

技术标签:

【中文标题】如何在不登录的情况下注册新用户?【英文标题】:How to register new user without need to login? 【发布时间】:2015-04-24 13:29:50 【问题描述】:

我在我的 OpenFire 服务器上注册新用户时遇到问题。这是来自服务器的回复。

<iq id='XILKN-9' to='pc-pc/b529612d' from='192.168.21.107' type='error'>
  <query xmlns='jabber:iq:register'>
    <password>123</password>
    <email>bear@bear.com</email>
    <username>bear</username>
  </query>
  <error type="modify">
    <bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
  </error>
</iq>

但是当我在注册新用户之前使用任何现有用户登录时,我可以成功注册新用户,这是来自服务器的回复

<iq id='XILKN-15' to='kkk@pc-pc/Smack' from='pc-pc' type='result'></iq>

这是我的代码:

String user ="bear";
String pass = "123";
String email = "bear@bear.com";
HashMap<String,String> attr = new HashMap<String, String>();
attr.put("username",user);
attr.put("password",pass);
attr.put("email", email);
if(conn2!=null) 

    Registration reg = new Registration();
    reg.setType(IQ.Type.SET);
    reg.setTo(conn2.getServiceName());
    reg.setAttributes(attr);
    PacketFilter filter = new AndFilter(new PacketIDFilter(
            reg.getPacketID()), new PacketTypeFilter(IQ.class));
    PacketCollector collector = conn2 .createPacketCollector(filter);
    try 
        conn2.sendPacket(reg);
     catch (SmackException.NotConnectedException e) 
        e.printStackTrace();
    
    IQ result = (IQ) collector.nextResult(SmackConfiguration
            .getDefaultPacketReplyTimeout());
    System.out.println(result);
    collector.cancel(); 

我使用了 OpenFire 3.9.3 和 aSmack 4.0.7。

【问题讨论】:

【参考方案1】:

如果我理解你的正确,我会通过接下来的步骤解决这个问题。

    与服务器建立连接。

    然后你用AccountManager

    然后你通过createAccount创建新帐户

所以 with 应该是这样的:

 AccountManager am = connection.getAccountManager();
                     Map<String, String> attributes = new HashMap<String, String>();
                     attributes.put("username", username);
                     attributes.put("password", password);
                     attributes.put("email", email);
                     attributes.put("name", name);
                     try 
                        am.createAccount(username, password,attributes);
                         Toast.makeText(getActivity(),"User create: " + username,Toast.LENGTH_SHORT).show();

                     catch (XMPPException e) 
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    

【讨论】:

以上是关于如何在不登录的情况下注册新用户?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不注册身份的情况下从外部提供商获取用户登录信息

如何在不退出的情况下使用 Firebase API 创建新用户? [复制]

如何在不使用 Facebook 登录/注销按钮的情况下以编程方式从 Facebook SDK 3.0 注销?

在不运行应用程序的情况下注册后台任务

如何在不退出的情况下更新会话值?

谷歌浏览器如何在不登录的情况下保存书签