我正在我的数据中心托管一个Ejabberd v17.11实例,同时为大约20个域提供服务,我们使用带有Ejabberd MySQL默认架构的MySQL v5.6作为我们的数据库,因为我们想使用以前的客户数据库(是的) ,LDAP应该是一个更好的解决方案,我之前尝试过建议。几天前,我和我的同事试图找到一种方法,在我们的前端客户端(JSXC)中显示用户的名字和姓氏,这样用户就可以以更友好的方式在他们的联系人列表(或名册组)中识别对方。
经过一些研究后,我们发现了Ejabberd的mod_vcard我们已经开始工作了。由于我们服务了大约20个域,因此我们的mysql ejabberd.vcard表很有可能携带重复的用户名,因为这个特定字段引用了用户名并忽略了它的域。
为了澄清,请举例说明仅包含来自域1的用户的vcard表。在那里,我们没有两个用户具有相同的用户名,因此我们没有冲突,用户可以正常登录并拥有他们的vcards显示。
+----------+-------+------------+
| username | vcard | created_at |
+----------+-------+------------+
| john.doe | (...) | (...) | (this John is from domain 1)
+----------+-------+------------+
当我们尝试从域2创建用户的vcards时,我们遇到了一个名为John Doe的两个用户(每个域一个)的示例冲突,我们遇到了第一个问题。
+----------+-------+------------+
| username | vcard | created_at |
+----------+-------+------------+
| john.doe | (...) | (...) | (this John is from domain 1)
| john.doe | (...) | (...) | (this John is from domain 2)
+----------+-------+------------+
当我们尝试登录我们的前端客户端时,我们意识到vcards停止为每个人工作,我们的嫌疑人依赖于这样一个事实,即没有域名,ejabberd不知道如何处理这些冲突。有没有人遇到过这个问题?我们考虑让一个Ejabberd实例为每个域都有自己的db,但这有点愚蠢,所以我们不知道该怎么做。
答案 0 :(得分:0)
应使用一个域的一个数据库
您可以使用virtual hosting:
host_config:
"example.net":
auth_method: sql
sql_type: odbc
sql_server: "DSN=ejabberd;UID=ejabberd;PWD=ejabberd"
"example.com":
auth_method: ldap
ldap_servers:
- "localhost"
- "otherhost"
ldap_uids:
- "uid"
ldap_rootdn: "dc=localdomain"
ldap_rootdn: "dc=example,dc=com"
ldap_password: ""