微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决无法使用 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 举报,一经查实,本站将立刻删除。