我有一个中间件,它处理传入的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。