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

时间:2010-09-27 04:17:46

标签: php chat xmpp ejabberd

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

以下是我的问题:

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

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

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

  4. 提前致谢。

2 个答案:

答案 0 :(得分:10)

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

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

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

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

答案 1 :(得分:8)

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

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

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

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