ejabberd中的vcard冲突

时间:2018-01-12 14:34:51

标签: erlang xmpp ejabberd vcard

我正在我的数据中心托管一个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,但这有点愚蠢,所以我们不知道该怎么做。

1 个答案:

答案 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: ""