【问题标题】:vcard conflict in ejabberdejabberd中的vcard冲突
【发布时间】:2018-06-22 00:59:21
【问题描述】:

我在我的数据中心托管了一个 Ejabberd v17.11 实例,它一次为大约 20 个域提供服务,我们使用 MySQL v5.6 和 Ejabberd MySQL 默认模式作为我们的数据库,因为我们想使用我们以前的客户端数据库(是的,LDAP应该是更好的解决方案,我之前尝试过建议)。几天前,我和我的同事试图想办法在我们的前端客户端(JSXC)中显示用户的名字和姓氏,以便用户可以在他们的联系人列表(或名册组)中以更友好的方式识别彼此。

经过一些研究,我们发现了来自 Ejabberd 的 mod_vcard,我们已经投入使用。由于我们服务于大约 20 个域,我们的 mysql ejabberd.vcard 表很有可能携带重复的用户名,因为这个特定字段引用了用户名并忽略了它的域。

为了澄清,以仅包含来自域 1 的用户的 vcard 表为例。在那里,我们没有两个具有相同用户名的用户,因此我们没有冲突,用户可以正常登录并拥有显示他们的电子名片。

+----------+-------+------------+  
| username | vcard | created_at |  
+----------+-------+------------+  
| john.doe | (...) | (...)      | (this John is from domain 1)  
+----------+-------+------------+

当我们尝试从域 2 中创建用户的电子名片时,我们遇到了一个名为 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 实例为每个域拥有自己的数据库,但这有点愚蠢,所以我们不知道该怎么做。

【问题讨论】:

    标签: erlang xmpp ejabberd vcf-vcard


    【解决方案1】:

    应为一个域使用一个数据库

    你可以使用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: ""
    

    【讨论】:

      猜你喜欢
      • 2015-05-06
      • 2019-06-17
      • 2016-04-12
      • 2016-11-24
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多