【发布时间】:2015-11-26 20:25:27
【问题描述】:
使用
- Converse JS v0.9.5 作为 Messenger 的 Web 前端
- Openfire XMPP Server v3.10.2作为Messenger的后端
- Web 应用程序本身是用 PHP 编写的。
目前,Openfire 和网站有单独的数据库,但它们是同步的。
我想要实现的是:
当用户登录网站时,Converse JS 还必须在整个用户会话期间登录并与Openfire XMPP Server 建立持久连接,直到注销。
我发现了什么
在 Converse JS 和 Openfire 网站上进行了大量搜索和研究。
请阅读,Converse JS 有 prebind property 和 Single Session Support 可以实现我想要的。他们还为网站提供PHP library 示例。
我做了什么
Converse JS 的初始脚本如下所示:
converse.initialize({
bosh_service_url: 'https://bind.example.com',
keepalive: true,
jid: 'me@example.com',
authentication: 'prebind',
prebind_url: 'http://example.com/api/prebind',
allow_logout: false
});
据我了解,整个过程如下:
- 将 jid 发送到 prebind_url,即http://example.com/api/prebind(查看配置属性 以上)
- PHP 后端接收 jid(即用户名)。要在 XMPP 服务器密码中进行身份验证,登录必须是纯文本格式。据我所知,Converse JS 为了让用户保持登录状态,可能会在每次需要时(jid、sid、rid)几乎每次都向http://example.com/api/prebind 发送请求。因此,从 PHP 端来看,纯文本身份验证需要每次都准备好。
- PHP 后端使用 PHP library 从 XMPP 服务器(jid、sid、rid)获取结果
- 以 JSON 格式返回 jid、sid、rid
所以问题是
困惑从第二步开始:由于 XMPP 身份验证,我应该在 PHP 会话中保存用户的 XMPP 密码并以纯文本格式登录吗?还是我弄错了,有更安全的方法来实现它?
在第三步中,在使用有效的用户名和密码进行测试时,出现Invalid challenge response received 错误。是否有任何用于从 PHP 进行身份验证的工作库?
【问题讨论】:
-
你有解决办法吗
标签: javascript php xmpp openfire converse.js