通过节点 js 应用程序访问 ejabberd ReST API
Accessing ejabberd ReST API through node js app
我在 Ubuntu 16.04 上有一个 ejabberd (16.01) 服务器 运行。我在不同的服务器上有另一个 NodeJs 应用程序 运行。通过 NodeJs 应用程序,我希望使用 https://docs.ejabberd.im/developer/ejabberd-api/.
给出的 ReST API 添加用户、添加名册等
我正在为这个练习做 https://docs.ejabberd.im/developer/ejabberd-api/simple-configuration/ 中给出的简单配置。配置说要添加以下代码段:
commands_admin_access:
- allow:
- user: "admin@localhost"
commands:
- add_commands: [user, admin, open]
# Tokens are valid for a year as default:
auth_expire: 31536000
oauth_access: all
这里的问题是,文档没有说明在什么情况下header需要添加这些配置?此配置的确切位置完全丢失!
我在文件末尾添加了上面的配置。但是,ejabberd 服务器不识别这些选项。日志说:
validate_opts:792 unknown option 'auth_expire' will be likely ignored
validate_opts:792 unknown option 'api_permissions' will be likely ignored
validate_opts:784 ignoring option 'commands_admin_access' with invalid value: [[{allow,[[{user,<<"ankit@replica3377.cloudapp.net">>}]]}]]
下面是我在ejabberd.yml文件中添加的额外配置:
commands_admin_access:
- allow:
- user: "ankit@replica3377.cloudapp.net"
commands:
- add_commands:
- status
- registered_users
- register
- unregister
# Tokens are valid for a year as default:
auth_expire: 31536000
oauth_access: all
api_permissions:
"API used from localhost allows all calls":
- who:
- ip: "168.63.209.95"
- what:
- "*"
- "!stop"
- "!start"
我认为文档不是很清楚。有人可以建议我在这里做错了什么吗?或者有没有其他方法可以实现我想要做的事情?
您使用的是非常旧的 Ejabberd 版本。最新版本是 17.04,与 16.01 相比,API 权限框架有很多变化。
首先,让我澄清一下您所看到的警告的原因。
- 'auth_expire' -- 实际参数名称为'oauth_expire'。看起来文档中有错误。代码请参考thislink
- 'api_permission' -- 该参数在 16.12 版本中引入。请参考 this link.
- 'commands_admin_access' -- 在 16.01 版本中,此参数仅将 atom 作为输入。在以后的版本中引入了 ACL 支持。因此,您可以创建 ACL 规则并提供规则名称,例如 this.
现在回答在何处添加此参数的问题 -- 只要您遵循 yaml 格式的准则,就可以在任何需要的地方添加此参数。由于这是独立的配置,因此不应在任何其他配置下。你可以把它放在最后,它应该可以正常工作。
我在 Ubuntu 16.04 上有一个 ejabberd (16.01) 服务器 运行。我在不同的服务器上有另一个 NodeJs 应用程序 运行。通过 NodeJs 应用程序,我希望使用 https://docs.ejabberd.im/developer/ejabberd-api/.
给出的 ReST API 添加用户、添加名册等我正在为这个练习做 https://docs.ejabberd.im/developer/ejabberd-api/simple-configuration/ 中给出的简单配置。配置说要添加以下代码段:
commands_admin_access:
- allow:
- user: "admin@localhost"
commands:
- add_commands: [user, admin, open]
# Tokens are valid for a year as default:
auth_expire: 31536000
oauth_access: all
这里的问题是,文档没有说明在什么情况下header需要添加这些配置?此配置的确切位置完全丢失!
我在文件末尾添加了上面的配置。但是,ejabberd 服务器不识别这些选项。日志说:
validate_opts:792 unknown option 'auth_expire' will be likely ignored
validate_opts:792 unknown option 'api_permissions' will be likely ignored
validate_opts:784 ignoring option 'commands_admin_access' with invalid value: [[{allow,[[{user,<<"ankit@replica3377.cloudapp.net">>}]]}]]
下面是我在ejabberd.yml文件中添加的额外配置:
commands_admin_access:
- allow:
- user: "ankit@replica3377.cloudapp.net"
commands:
- add_commands:
- status
- registered_users
- register
- unregister
# Tokens are valid for a year as default:
auth_expire: 31536000
oauth_access: all
api_permissions:
"API used from localhost allows all calls":
- who:
- ip: "168.63.209.95"
- what:
- "*"
- "!stop"
- "!start"
我认为文档不是很清楚。有人可以建议我在这里做错了什么吗?或者有没有其他方法可以实现我想要做的事情?
您使用的是非常旧的 Ejabberd 版本。最新版本是 17.04,与 16.01 相比,API 权限框架有很多变化。
首先,让我澄清一下您所看到的警告的原因。
- 'auth_expire' -- 实际参数名称为'oauth_expire'。看起来文档中有错误。代码请参考thislink
- 'api_permission' -- 该参数在 16.12 版本中引入。请参考 this link.
- 'commands_admin_access' -- 在 16.01 版本中,此参数仅将 atom 作为输入。在以后的版本中引入了 ACL 支持。因此,您可以创建 ACL 规则并提供规则名称,例如 this.
现在回答在何处添加此参数的问题 -- 只要您遵循 yaml 格式的准则,就可以在任何需要的地方添加此参数。由于这是独立的配置,因此不应在任何其他配置下。你可以把它放在最后,它应该可以正常工作。