调用Erlang函数在ejabberd中创建用户

调用Erlang函数在ejabberd中创建用户,erlang,xmpp,ejabberd,Erlang,Xmpp,Ejabberd,我使用的是erlang 18,ejabberd 15.09。我正在尝试创建聊天应用程序。为此,我必须使用Erlang为ejabberd创建用户。 我使用了erlang函数ejabberd\u auth:try\u register来实现: ejabberd_auth:try_register(<<"username">>, <<"example.com">>, <<"secret_password">>). ejabber

我使用的是erlang 18,ejabberd 15.09。我正在尝试创建聊天应用程序。为此,我必须使用Erlang为ejabberd创建用户。 我使用了erlang函数
ejabberd\u auth:try\u register
来实现:

ejabberd_auth:try_register(<<"username">>, <<"example.com">>, <<"secret_password">>).
ejabberd\u auth:try\u register(,)。
它产生了以下错误:

异常错误:未定义的函数stringprep:nameprep/1
在函数jlib:nameprep/1中(src/jlib.erl,第331行)
来自ejabberd_auth:auth_modules/1的调用(src/ejabberd_auth.erl,第429行)
来自ejabberd_auth的调用中:is_user_exists/2(src/ejabberd_auth.erl,第323行)
来自ejabberd_auth的调用中:try_register/3(src/ejabberd_auth.erl,第187行)


如何解决此问题?

您似乎没有安装
stringprep
依赖项。
p1_stringprep
()依赖项在构建过程中自动下载或包含在正式软件包中


您的错误表明ejabberd的构建不正确或安装不正确。

您似乎没有安装
stringprep
依赖项。
p1_stringprep
()依赖项在构建过程中自动下载或包含在正式软件包中


您的错误表明ejabberd的构建不正确或安装不正确。

您的安装似乎有问题,因为似乎找不到stringprep模块。我使用源代码安装ejabberd,使用“ejabberdctl register xxx”添加用户并登录确定,登录后还可以在web中添加用户。我需要做什么其他操作?好吧,你的安装是坏的(要么缺少ejabberd依赖项,要么错误的Erlang路径)。实际上,解决方案取决于您在安装过程中遗漏了什么,我建议您阅读官方文档:似乎您在安装过程中遇到了问题,因为似乎找不到stringprep模块。我使用源代码安装ejabberd,使用“ejabberdctl register xxx”添加用户并登录ok,登录后也可以在网站上添加用户。我需要做什么其他操作?好吧,你的安装是坏的(要么缺少ejabberd依赖项,要么错误的Erlang路径)。实际上,解决方案取决于您在安装过程中遗漏了什么,我建议您阅读官方文档:我在安装后的“ejabberd master/deps/”中找到了p1_stringprep,所有beams文件(stringprep.beam、stringprep_app.beam、stringprep_sup.beam)也在lib/ejabberd/ebin中,那么编译器的路径是否错误?为此:ejabberd master$erl-pa/lib/ejabberd/ebin/Erlang/OTP 18[erts-7.1][source][64位][async threads:10][hipe][kernel poll:false]Eshell V7.1(用^G中止)1>ejabberd_auth:try_register(,)。您的路径显然是错误的。启动Erlang时,您仅将/lib/ejabberd/ebin/添加到路径。您还应该有指向所有依赖项的路径。您能告诉我怎么做吗?我将“erl-pa/lib/ejabberd/ebin”更改为“erl-pa/lib/ejabberd”,显示:异常错误:未定义函数ejabberd\u auth:try\u register/3您需要为ejabberd/ebin添加一个-pa指令,并为每个依赖项ebin目录添加一个指令。请注意,如果您使用ejabberdctl脚本启动ejabberd,您将不会遇到此问题,因为它已经为您解决了。感谢您的回答,使用ejabberdctl脚本:“ejabberdctl regster username host password”是可以的。但我的目的是:通过在后台添加新模块complete register user,我的新模块将用于此目的(mod_useradd_hooca.erl):-module(mod_useradd_hooca)。-behavior(gen_mod)。-export([start/2,stop/1])-export([user_add/3])。start(Host,Opts)->ok.stop(Host)->ok…….user_add(user,Server,Password)->case ejabberd(auth:try(register(user,Server,Password)of{error,}->错误;->确定结束。我在安装后的“ejabberd master/deps/”中找到了p1_stringprep,所有的beams文件(stringprep.beam、stringprep_app.beam、stringprep_sup.beam)也在lib/ejabberd/ebin中,所以编译器的路径是否是错误的?对于这一点:ejabberd master$erl-pa/lib/ejabberd/ebrd/ebin/Erlang/OTP 18[erts-7.1][源代码][64位][async threads:10][hipe][kernel poll:false]Eshell V7.1(使用^G中止)1>ejabberd_auth:try_register(,)。您的路径显然是错误的。启动Erlang时,您仅将/lib/ejabberd/ebin/添加到路径。您还应该具有指向所有依赖项的路径。您能告诉我怎么做吗?我将“erl-pa/lib/ejabberd/ebin”更改为“erl-pa/lib/ejabberd,显示:异常错误:未定义函数ejabberd_auth:try_register/3您需要为ejabberd/ebin添加一个-pa指令,并为每个依赖性ebin目录添加一个。请注意,如果您使用ejabberdctl脚本启动ejabberd,您将不会遇到此问题,因为它已经为您解决了。感谢您的回答,请使用ejabberdctl脚本:ejabberdctl regster username host password”是可以的。但我的目的是:通过在后台添加新模块完成注册用户,我的新模块(mod_useradd_hooca.erl):-module(mod_useradd_hooca)。-behavior(gen_mod)。-export([start/2,stop/1])-export([user_add/3])。start(host,Opts)->ok.stop(host)->确定…….用户添加(用户、服务器、密码)->案例ejabberd\u验证:尝试注册{error、\u Reason}->error;\确定结束。