Как можно использовать сочетание аутентифицированных и неаутентифицированных веб-сокетов с помощью Django Channels?

Я запускаю приложение Django с DRF и Channels и настроил несколько веб-сокетов, один из которых должен быть открытым/небезопасным. Однако все, что я могу понять, это как включить/выключить безопасность на уровне приложения, а не на уровне конкретного потребителя.

Вот конфигурация asgi.py:

application = ProtocolTypeRouter(
    {
        "http": django_application,
        "websocket": AllowedHostsOriginValidator(
            AuthMiddlewareStack(URLRouter(websocket_routing.websocket_urlpatterns))
        )
    }
)

Альтернативно, чтобы отключить аутентификацию, я могу переключить запись websocket на URLRouter(websocket_routing.websocket_urlpatterns)

С помощью представлений DRF достаточно легко отключить аутентификацию:

class WebhookCallEvents(APIView):

    authentication_classes = []
    permission_classes = []

Но эти свойства, похоже, не работают в классе-потребителе:

class MyConsumer(AsyncWebsocketConsumer):

    authentication_classes = []
    permission_classes = []

Как включить аутентификацию для одних сокетов, но отключить ее для других в рамках одного приложения?

Похоже, что это дубликат этого вопроса здесь: Django Channels 2 websockets multiple AuthMiddlewareStacks

Однако ни один из ответов не принимается, так что, возможно, переформулировка вопроса даст какие-то результаты.

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