xmpp4r 和 Iq.new_register 用于带内注册 [英] xmpp4r and Iq.new_register for in-band registration
问题描述
我在使用 xmpp4r 进行带内注册时遇到了问题,请遵循此处的 SO 线程:
I've been having trouble using xmpp4r to do in-band registration following the SO thread here:
问题归结为当我运行以下代码时,我收到了 new_register 的 NoMethodError Exception 错误:
The problem comes down to that I get a NoMethodError Exception error for new_register when I run the following code:
require "xmpp4r"
require "xmpp4r/client"
require "xmpp4r/iq"
def in_band_reg
chat_name = 'testChatName'
password = 'pword'
reg = Jabber::Iq.new_register(chat_name, password)
end
NoMethodError Exception: undefined method `new_register' for Jabber::Iq:Class
在文件 iq.rb 的 xmpp4r gem 中,我可以看到 new_register 方法定义为:
In the xmpp4r gem in the file iq.rb I can see the new_register method defined as:
def Iq.new_register(username=nil, password=nil)
...
end
但是当我检查类的方法时,我看不到 new_register 方法.即
but when I examine the class's methods I'm not able to see the new_register method. I.E.
Jabber::Iq.singleton_methods(false)
["new_authset", "new_rosterget", "new_vcard", "new_rosterset", "import", "new_authset_digest", "new_query", "add_elementclass", "new_browseget"]
Jabber::Iq.public_instance_methods(false)
["query=", "queryns", "set_type", "type", "typed_add", "type=", "query", "vcard"]
Jabber::Iq.respond_to?("new_register")
false
知道为什么我无法访问 'xmpp4r/iq' 中的 new_register 方法吗?
Any idea why I can't access the new_register method in 'xmpp4r/iq' ?
推荐答案
我只是通过自己编写代码来解决这个问题.首先连接一个可以带内注册新用户的客户端:
I got this working by just coding it up myself. First connect a client that can in-band register new users:
jid = JID::new('admin@ejabberd.server.com/res')
client = Client::new(jid, false)
client.connect
client.auth("admin_password")
然后让该客户端通过发送带内消息来注册一个新用户
then have that client register a new user by sending an in-band message
iqr = Iq.new(:set)
qr = IqQuery.new
qr.add_namespace('jabber:iq:register')
username = 'new_user'
password = 'new_user_password'
qr.add(REXML::Element.new('username').add_text(username))
qr.add(REXML::Element.new('password').add_text(password))
iqr.add(qr)
client.send iqr
这篇关于xmpp4r 和 Iq.new_register 用于带内注册的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!