接受连接之前如何发送错误?

时间:2019-08-05 12:02:10

标签: django-channels

我有一个中间件,它处理传入的Websocket连接的令牌身份验证。像这样的东西:

def __init__(self, inner):
    self.inner = inner

def __call__(self, scope):
    try:
        close_old_connections()
        query = dict((x.split('=') for x in scope['query_string'].decode().split("&")))
        token = query['token']

        token = Token.objects.get(key=token)
        if token:
            scope['user'] = token.user
        else:
            scope['user'] = AnonymousUser


        if query["action"] == "create":
            scope["action"] = query["action"]
            """
            Check if the room level is a number then convert it back to string
            In case of error, raise ValueError exception
            """
            scope["room-level"] = str(int(query["room-level"]))

        elif query["action"] == "join":
            scope["action"] = query["action"]
            scope["room-id"] = str(int(query["room-id"]))

        else:
            return Response({
                "error": "Wrong action param"
            }, 500)

        return self.inner(scope)

    except KeyError:
        return Response({
            "error": "Missing param"
        }, 500)

    except ValueError:
        return Response({
            "error": "Invalid param Value"
        }, 500)

    except Token.DoesNotExist:
        scope['user'] = AnonymousUser
    return self.inner(scope)

问题是,在缺少参数或操作值错误的情况下,我看不到发送错误消息的方法,因为“响应”不适用于websocket连接。此外,self.accept()方法仅会在位于使用者中的connect函数中被调用。.在使用此方法之前,我将无法通过错误消息使用self.send_json。

0 个答案:

没有答案