Ejabberd Django Внешняя аутентификация не работает - PullRequest
0 голосов
/ 03 июля 2019

Я работаю над сайтом Django, которому нужна система чата, поэтому я хотел реализовать XMPP-сервер, который аутентифицируется на бэкэнде Django.

Я использовал различные сценарии внешней аутентификации Ejabberd, такие как django-xmpp, django-ejabberd-bridge и один из них можно найти по адресу https://www.ejabberd.im/files/contributions/ejabberd_auth_bridge.py.txt

Но все же ни один из них не работал. Сценарий, предоставленный django-xmpp, аварийно завершает работу при входе на сервер XMPP с ошибкой

An error has occurred during eJabberd external authentication: unpack requires a buffer of 2 bytes
Traceback (most recent call last):
File "/home/dcpacky/Public/plutus.live/userdashboard/management/commands/ejabberd_auth.py", line 105, in handle
data = self.from_ejabberd()
File "/home/dcpacky/Public/plutus.live/userdashboard/management/commands/ejabberd_auth.py", line 40, in from_ejabberd
(size,) = struct.unpack(">h", input_length)
struct.error: unpack requires a buffer of 2 bytes

И тогда происходит сбой скрипта аутентификации. Та же ошибка возникает при использовании django-ejabberd-bridge, но поскольку django-xmpp основан на django-ejabberd-bridge, это, вероятно, тот же источник ошибки.

Когда я использую реализацию, описанную в документации Ejabberd, которая связана выше, возникает следующая ошибка.

Traceback (most recent call last):
File "/home/dcpacky/Public/plutus.live/userdashboard/management/commands/ejabberd_auth.py", line 126, in handle
size = struct.unpack('>h', length)[0]
TypeError: a bytes-like object is required, not 'str'

Я пробовал использовать такие функции, как str (), encode (), decode () и т. Д., Но пока не смог заставить его работать. Скрипт в документе Ejabberd также предназначен для более ранней версии Django и даже для Python 2, я думаю. Я читал, что Python 2 обрабатывает байты, строки и кодировки иначе, чем Python 3 сейчас, но у меня нет опыта работы с Py 2 и я не могу указать на точную проблему.

Сценарии аутентификации можно найти в репозитории github django-xmpp & django-ejabberd-bridge и по ссылке выше.

https://github.com/ffalcinelli/django-ejabberd-bridge/blob/master/ejabberd_bridge/management/commands/ejabberd_auth.py

https://github.com/fpytloun/django-xmpp/blob/master/xmpp/management/commands/ejabberd_auth.py

Если вам потребуется дополнительная информация, не стесняйтесь спрашивать. :)

...