在我的项目中,用户需要通过带有令牌的中间件进行身份验证才能连接到消费者,当我打开与失眠的连接时,它与 virtualvenv 一起工作正常,但是当我尝试使用 docker 运行项目并连接到消费者时,我得到这个错误:
WebSocket ['172.18.0.1', 53588] rejected by application
这是我根据文档进行的设置:
在 asgi.py 中
application = ProtocolTypeRouter({
# Django's ASGI application to handle traditional HTTP requests
"http": django_asgi_app,
# WebSocket chat handler
"websocket": AllowedHostsOriginValidator(
AuthMiddlewareStack(
URLRouter([
# path("chat/admin/", AdminChatConsumer.as_asgi()),
# path("chat/", PublicChatConsumer.as_asgi()),
re_path(r'poll/(?P<room_name>\w+)/$',PollConsumer.as_asgi()),
])
),
),
})
docker-compose-yml :
services:
myservice:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./:/app
- /store/event/media:/app/media
- /store/event/static:/app/static
env_file:
- ./envs/development.env
command:
daphne myproject.asgi:application --port 8001 --bind 0.0.0.0 -v2
ports:
- 8001:8001
depends_on:
- event-database
- redis
redis:
image: redis:latest
ports:
- "6379:6379"
我已经设置了 ALLOWED_HOSTS=['*'] 但是当我尝试连接到路由 url 时我被应用程序拒绝了
网址:
ws://localhost:8001/poll/11/?token=token
这是 routing.py :
websocket_urlpatterns = [
re_path(r'poll/(?P<room_name>\w+)/$', consumers.PollConsumer.as_asgi()),
]