Django Channels Consumer не выполняет метод

Я пытаюсь разработать приложение для чата, которое сохраняет сообщения в базе данных через WebSocket с помощью Django Channels.

settings.py:

ASGI_APPLICATION = "app.asgi.application"
CHANNEL_LAYERS = {
    'default': {
    'BACKEND': "channels.layers.InMemoryChannelLayer",  
    },
}

asgi.py:

from api.routing import websocket_urlpatterns

application = ProtocolTypeRouter({
"http" : get_asgi_application(),
"websocket": JWTAuthMiddleware(
    URLRouter(
        websocket_urlpatterns
    )
  ),
})

routing.py:

websocket_urlpatterns = [
    path('ws/chat/<chat_uuid>/', consumers.ChatConsumer.as_asgi())
]

consumers.py

class ChatConsumer(AsyncJsonWebsocketConsumer):
    @database_sync_to_async
    def create_message(self, sender, message, chat):
        if sender:
            if content_validation(message):
                chat = Chat.objects.filter(uuid=chat)
                if chat.exists():
                    msg = Message.objects.create(sent_by=sender, content=message)
                    chat.first().messages.add(msg)

                    return msg

        return None
    
    @database_sync_to_async
    def check_security(self, user, uuid):
        # Chat has to exist and user has to be part of it
        chat = Chat.objects.filter(Q(Q(user1=user) | Q(user2=user)) & Q(uuid=uuid))
        if chat.exists():
            return True
        
        return False

    async def connect(self):
        self.chat_uuid = self.scope['url_route']['kwargs']['chat_uuid']
        self.room_group_name = 'chat_%s' % self.chat_uuid

        user = self.scope["user"]

        if user:
            check = await self.check_security(user, self.chat_uuid)
            if check == True:
                # Join room group
                await self.channel_layer.group_add(
                    self.room_group_name,
                    self.channel_name
                )

                await self.accept()
        
        await self.disconnect(401)

    async def disconnect(self, close_code):
        # Leave room group
        await self.channel_layer.group_discard(
            self.room_group_name,
            self.channel_name
        )

    # Receive message from WebSocket
    async def receive(self, text_data):
        text_data_json = json.loads(text_data)
        message = text_data_json['message']
        name = text_data_json['name']
        print(text_data_json)

        user = self.scope["user"]
        # Is this smart? User not receiving a message for whatever reason won't trigger the create event
        new_msg = await self.create_message(user, message, self.chat_uuid)

        if new_msg != None:
            # Send message to room group
            print("Receiving")
            await self.channel_layer.group_send(
                self.room_group_name,
                {
                    'type': 'chat_message',
                    'message': message,
                    'name': name
                }
            )
        else:
            await self.channel_layer.group_send(
                self.room_group_name,
                {
                    'type': 'content_guideline_violation',
                    'message': "",
                    'name': name
                }
            )

    # Receive message from room group
    async def chat_message(self, event):
        message = event['message']
        name = event['name']
        print(event)

        # Send message to WebSocket
        print("Sending")
        await self.send(text_data=json.dumps({
            'message': message,
            'name': name
        }))

Я не буду пока описывать JWTAuthMiddleware, так как после первой реализации все работало нормально. Проблема в том, что даже если connect и receive выполняются нормально, то chat_message по какой-то причине больше не выполняется. Мои запросы Postman выглядят следующим образом:

ws://127.0.0.1:8000/ws/chat/<chat_uuid>/?Bearer=<jwt_token>

Postman может подключиться к websocket и отправляет сообщения, а также сохраняет их в базе данных, но не показывает эти сообщения другому пользователю в чате.

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