【问题标题】:Call an Erlang function to create a user in ejabberd调用 Erlang 函数在 ejabberd 中创建用户
【发布时间】:2016-01-14 20:31:15
【问题描述】:

我正在使用 erlang 18,ejabberd 15.09。我正在尝试创建聊天应用程序。为此,我必须使用 Erlang 为 ejabberd 创建用户。 为此,我使用了 erlang 函数 ejabberd_auth:try_register:

ejabberd_auth:try_register(<<"username">>, <<"example.com">>, <<"secret_password">>).

产生如下错误:

异常错误:未定义函数 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。
  • 我用源码安装了ejabberd,用“ejabberdctl register xxx”添加用户登录成功,登录后也可以在web中添加用户。我还需要做什么其他操作?
  • 好吧,你的安装坏了(要么是缺少 ejabberd 依赖,要么是错误的 Erlang 路径)。实际上分辨率取决于您在安装过程中错过了什么,我建议您阅读官方文档:docs.ejabberd.im/admin/guide/installation

标签: erlang xmpp ejabberd


【解决方案1】:

您似乎没有安装 stringprep 依赖项。 p1_stringprep (https://github.com/processone/stringprep) 依赖会在构建期间自动下载或包含在官方包中。

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

【讨论】:

  • 安装后我在“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-bit] [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)。 -行为(gen_mod)。 -导出([开始/2,停止/1])。 -导出([user_add/3])。开始(主机,选择)-> 好的。停止(主机)-> 好的。 ...... user_add(User, Server, Password) -> case ejabberd_auth:try_register(User, Server, Password) of {error, _Reason} -> error; _ -> 好的结束。
猜你喜欢
  • 2010-12-10
  • 2014-10-21
  • 2013-10-03
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 2014-02-17
  • 2015-12-17
  • 2016-05-18
相关资源
最近更新 更多