Связывание пользователей с соединениями
Чтобы связать пользователя с подключением через веб-сокет, вы можете обернуть URLRouter класс AuthMiddlewareStack предоставленными каналами. Это заполнит метаданные о соединении с экземпляром пользователя.
Доступ к метаданным можно получить из атрибута self.scope в потребительском классе. Область действия аналогична request.META Django.
Кроме того, в целях безопасности вы добавите AllowedHostsOriginValidator, который проверяет источник подключения к веб-сокету.
Измените файл asgi.py, как показано ниже:
import os
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
import chat.routing
from channels.security.websocket import AllowedHostsOriginValidator
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_channels_chat.settings')
asgi_application = get_asgi_application()
application = ProtocolTypeRouter({
"http": asgi_application,
"websocket":
AllowedHostsOriginValidator(
AuthMiddlewareStack(
URLRouter(chat.routing.websocket_urlpatterns)
),
)
})