我一直无法使用xmpp4r在SO线程之后进行带内注册:
XMPP transport to another protocol
问题归结为我在运行以下代码时遇到new_register的NoMethodError异常错误:
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方法定义为:
def Iq.new_register(username=nil, password=nil)
...
end
但是当我检查类的方法时,我无法看到new_register方法。即。
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方法吗?
答案 0 :(得分:2)
我通过自己编写代码来完成这项工作。首先连接一个可以在带内注册新用户的客户端:
jid = JID::new('admin@ejabberd.server.com/res')
client = Client::new(jid, false)
client.connect
client.auth("admin_password")
然后让该客户端通过发送带内消息注册新用户
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
答案 1 :(得分:0)
您使用的是什么版本的xmpp4r?你试过GitHub版本吗?
gem sources -a http://gems.github.com (you only need to do this once!)
gem install ln-xmpp4r