无法使用 ejabber_django bridge.py 登录到 ejabberd

问题描述

我正在尝试使用 django-ejabberd-bridge.py 方法针对 django 对 ejabberd 进行身份验证,但始终失败。 我正在使用 django 管理命令 这是代码..

import struct
import sys
from django.core.management.base import BaseCommand

class Command(BaseCommand):
    def read(self):
        (pkt_size,) = struct.unpack('>H',sys.stdin.read(2))
        pkt = sys.stdin.read(pkt_size)
        cmd = pkt.split(':')[0]
        if cmd == 'auth':
            u,s,p = pkt.split(':',3)[1:]
            if u == "wrong":
                self.write(False)
            else:
                self.write(True)
            self.read()

    def write(self,bool):
        if bool:
            sys.stdout.write('\x00\x02\x00\x01')
        else:
            sys.stdout.write('\x00\x02\x00\x00')
        sys.stdout.flush()

    def handle(self,*args,**options):
        try:
            while True:
                self.read()
                if not options.get("run_forever",True):
                    break
        except Exception:
            self.stdout.write("Uups")
   

它说我的身份验证失败。 但是,下面的代码有效,我可以登录到 xmpp 客户端..

import sys
import struct


def read():
    (pkt_size,sys.stdin.read(2))
    pkt = sys.stdin.read(pkt_size)
    cmd = pkt.split(':')[0]
    if cmd == 'auth':
        u,3)[1:]
        if u == "wrong":
            write(False)
        else:
            write(True)
    elif cmd == 'isuser':
        u,s = pkt.split(':',2)[1:]
        write(True)
    elif cmd == 'setpass':
        u,3)[1:]
        write(True)
    elif cmd == 'tryregister':
        u,3)[1:]
        write(True)
    elif cmd == 'removeuser':
        u,2)[1:]
        write(True)
    elif cmd == 'removeuser3':
        u,3)[1:]
        write(True)
    else:
        write(False)
    read()

def write(result):
    if result:
        sys.stdout.write('\x00\x02\x00\x01')
    else:
        sys.stdout.write('\x00\x02\x00\x00')
    sys.stdout.flush()

if __name__ == "__main__":
    try:
        read()
    except struct.error:
        pass

我不明白为什么 .谁能帮我解决这个问题!抱歉我的英语不好。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)