TypeError: BaseMiddleware.__call__() отсутствуют 2 обязательных позиционных аргумента: 'receive' и 'send'

Я получаю вышеуказанную ошибку для моего пользовательского промежуточного ПО, которое я создал, и оно не отзывается, когда я пытаюсь это сделать

from GOVDairySync.exceptions import *
from channels.middleware import BaseMiddleware
from rest_framework.authtoken.models import Token
from django.contrib.auth.models import AnonymousUser
from channels.db import database_sync_to_async

def get_user(token):
    try:
        token = Token.objects.get(key=token)
        return token.user
    except Token.DoesNotExist:
        return AnonymousUser()

class TokenAuthMiddleware(BaseMiddleware):

    async def _call_(self, scope, receive, send):
        headers = dict(scope['headers'])
        if b'authorization' in headers:
            token_name, token_key = headers[b'authorization'].decode().split()
            if token_name == 'Token':
                try:
                    print(token_key)
                    # Try to get the user using the token
                    scope['user'] = await get_user(token=token_key)
                    print(scope['user'])
                except BaseCustomException as e:
                    # If an exception occurs, send an error response to the client
                    response = {
                        'type': 'authentication.error',
                        'message': str(e),
                    }
                    await send({
                        'type': 'websocket.close',
                        'code': 400,  # Custom code for authentication error
                        'text': 'Authentication error',
                    })
                    
        return await super()._call_(scope, receive, send)


выше блок кода - это пользовательское промежуточное ПО, которое я создал, как я могу решить эту проблему?

я хочу использовать это промежуточное ПО следующим образом

from channels.routing import ProtocolTypeRouter, URLRouter
from channels.security.websocket import AllowedHostsOriginValidator
from django.core.asgi import get_asgi_application
from chat_app import routing
from channels.auth import AuthMiddlewareStack
from .tokenauth_middleware import TokenAuthMiddleware  # new


application = ProtocolTypeRouter(
    {
        "http": get_asgi_application(),
        "websocket": AllowedHostsOriginValidator(
            TokenAuthMiddleware(URLRouter(routing.websocket_urlpatterns))
        ),
    }
)




Вернуться на верх