如何将网站上的 XMPP 与注册用户完全集成

2022-08-31 01:10:32

我们有一个社交网站,人们有联系人,我们希望它与XMPP集成。我们目前使用 ejabberd XMPP 服务器。

以下是我的问题:

  1. 如何正确创建帐户?现在,我想的是在我们的Web应用程序上注册用户,我们会调用一个脚本来执行ejabberd命令来创建用户。

  2. 用户身份验证。用户登录我们的网站后,用户将自动登录聊天系统。如何在客户端使用 strophe.js执行此操作?据我所知,您需要提供JID和密码进行身份验证,因此我认为在登录时,会有一个ajax调用来获取用户的密码,然后在strophe.js的登录调用上使用响应文本。这安全吗?还有其他方法可以做到这一点吗?

  3. 状态注册。我们的Web应用程序有一个联系人系统,但XMPP有自己的方式通过状态订阅添加联系人,对吧?示例:当 user1 尝试添加 user2 时,在 user1 可以成为 user2 的联系人之前,将要求用户 2 进行授权。但是,由于我们的Web应用程序上已经有一个联系人系统,因此我们希望绕过XMPP的这种授权或禁止它,并在user2确认user1作为我们网站上的联系人时使用脚本/命令进行授权。我还不清楚,但一位同事说这在ejabberd的模块mod_admin_extra(一个无需客户端授权即可创建订阅的命令)上是可能的。是否可能,或者我是否必须使用脚本手动操作ejabberd数据库(前提是我从默认的Mnesia db转移到另一个db,比如MySQL)。

提前致谢。


答案 1

我们(超级馈送器)有一个类似的Web应用程序,其中XMPP是应用程序的一部分。

我们所做的选择是不在 Web 应用存储和 XMPP 服务器上复制用户数据。您可以使用带有 ejabberd 的 Web 应用程序数据存储来构建自己的身份验证机制,这非常简单。这样,您只有 1 个存储用户数据的位置,而不必创建 ejabberd 用户。

通过这样做,您还可以在Web应用程序上登录用户,而无需知道他们的密码,甚至将其存储在明文:)中。简单的方法是在服务器上执行会话身份验证(通过Bosh),并通过@metajack将会话ID传递给HTML响应,如此处所述

第三部分可能是最棘手的,但我实际上非常确定您可以绕过这一点,而不是使用内置的“花名册”......但是,它可能涉及创建您自己的组件(内部或外部)。


答案 2

好吧,这是我们所做的:

1) 在用户注册后,我们在 XMPP 上创建用户帐户,而不是自定义身份验证/外部身份验证。

2)这个问题的答案是会话附件,正如朱利安指出的那样。我们创建了一个 PHP 脚本,该脚本将创建会话并返回会话 ID 和 RID。在用户登录时(在文档准备就绪后)通过 AJAX 调用。

3)正如我在对朱利安帖子的评论中所说的那样,我们使用了mod_admin_extra。我们结合mod_rest(w/c允许您发送节/运行命令REST样式)来创建花名册。mod_admin_extra上有一个*add_rosteritem*命令,每次用户在我们的网站上创建联系人时,都会调用该命令。


推荐