django应用程序的xmpp集成变得简单
django-xmpp的Python项目详细描述
django应用程序的xmpp集成变得简单!
注意!
此应用程序处于早期开发阶段。每一个帮助或反馈都是值得赞赏的。
功能
- ConverseJS网络聊天集成
- 当然,最好的xmpp web客户端
- 灵感来自TracyWebTech/django-conversejs
- 支持MUC自动连接
- 支持用户查询
- 使用ejabberd_auth management命令进行ejabberd django身份验证
- 无需存储用户凭据的单点登录功能 (需要使用ejabberd_auth)
- 在首次登录时使用Gravatar和vCard设置虚拟形象
安装
通过pip安装django-xmpp:
pip install django-xmpp
将xmpp和django_gravatar添加到已安装的应用程序中:
INSTALLED_APPS = ( ... 'django_gravatar', 'xmpp', )
设置最重要的变量:
XMPP_DOMAIN = 'example.com' XMPP_BOSH_SERVICE_URL = 'https://xmpp.example.com:5280/http-bind'
可选择设置ConverseJS以满足您的需要:
XMPP_CONVERSEJS_SETTINGS = { 'allow_contact_removal': False, 'allow_contact_requests': True, 'auto_subscribe': True, 'allow_logout': False, 'allow_muc': True, 'allow_otr': False, 'allow_registration': False, 'message_carbons': True, 'hide_muc_server': True, 'use_vcards': True, 'animate': True, 'play_sounds': True, 'xhr_user_search': True, 'sounds_path': '%ssounds/' % STATIC_URL, 'visible_toolbar_buttons': { 'call': False, 'clear': False, 'emoticons': True, 'toggle_participants': False, } }
在urls.py中包含xmpp.urls:
urlpatterns = [ ... url(r'^xmpp/', include("xmpp.urls")), ]
在基本模板中使用conversejs:
{% load xmpp_tags %} {% conversejs_initialize %}
ejabberd django身份验证
创建ejaberd_auth.sh文件,只需调用ejabberd_auth 管理指挥部。调整以适应您的环境(如virtualenv):
#!/bin/bash cd <path_to_your_django_project> python manage.py ejabberd_auth $@
编辑ejabberd.yml并添加外部验证脚本,例如:
host_config: "example.com": auth_method: external extauth_program: "/<path_to_your_project>/ejabberd_auth.sh"
设置
这些是您可以使用的所有可用设置。
- xmpp_bosh_service_url
- conversejs bosh连接的url
- xmpp_域
- 默认xmpp域
- xmpp_domain_muc
- 多用户聊天的域(默认Converence<;xmpp_domain>;)
- xmpp_conversejs_auth
- conversejs的身份验证类型(prebind不是 支持,因此登录是唯一的选择)
- xmpp_conversejs_设置
- 传递给converse.initialize的设置字典。 有关可用选项的更多列表,请参见Converse.js docs
- xmpp_启用
- 完全启用或禁用xmpp
- xmpp更新vcard
- 启用或禁用vCard更新
- xmpp更新vcard小时数
- 每n小时更新一次vCard(默认为false)
关于用户名的说明
jabber id不区分大小写(因此“MyUser@domain.com”和“myuser@domain.com”是同一个帐户)。相比之下,默认django User模型中的username字段是区分大小写的(请参见this Django ticket)。这意味着django中的两个单独的“myuser”和“myuser”帐户在xmpp服务器上具有相同的jid。ejabberd_authmanagement命令不会对此类用户进行身份验证,它们在converse和其他xmpp客户机中都会看到“身份验证失败”。
为了避免这种冲突,建议使用自定义的User模型,该模型使用RegexField强制使用唯一的小写用户名。也应该排除jabber id中不允许的其他字符。有关详细信息,请参见this guide。