15

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

以下是我的问题:

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

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

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

提前致谢。

4

2 回答 2

10

我们(superfeedr)有一个类似的网络应用程序,其中 XMPP 是应用程序的一部分。

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

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

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

于 2010-09-27T13:01:05.587 回答
8

好的,这就是我们所做的:

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

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

3) As I said on a comment on Julien's post, we used mod_admin_extra. We coupled with mod_rest (w/c allows you to send stanzas/run commands REST style) to create the rosters. There is an *add_rosteritem* command on mod_admin_extra that gets called every time users create contacts on our web site.

于 2010-11-02T07:00:24.830 回答