Проблемы с Django Channels и подключением к Flutter

Проблема: При попытке подключения к каналам я получаю ошибку в flutter:

WebSocketChannelException: WebSocketException: Connection to 'http://"###my ip ###":8000/ws/joingroup/8598969d-3dfa-4017-849c-dcbb71c1f9f0/#' was not upgraded to websocket

Я использую пакет websocket channel и в контроллере flutter у меня есть:

  WebSocketChannel? channel;                    //initialize a websocket channel
  bool isWebsocketRunning = false;

 void startStream() async {
    
    if (isWebsocketRunning) return;            //check if socket running
    var url = 'ws://${ip}:8000/ws/joingroup/${Get.parameters['groupid']}/';
    this.channel = WebSocketChannel.connect(
      Uri.parse(url),                           //connect to a websocket
    );
    channel!.stream.listen(
          (event) {
        print(json.decode(event));           
      },
      onDone: () {
        isWebsocketRunning = false;
      },
        onError: (error) {
          debugPrint('ws error $error');
        }

    );
  }

вопрос 1) почему написано "http://...", когда я четко указал, что это ws url.

в бэкэнде я использую каналы django. app routing::

from django.urls import re_path
from django.urls import path
#this is utilizing relative paths. this is more advanced paths.
#
from . import consumers

websocket_urlpatterns = [
    
    path('ws/joingroup/<slug:groupid>/', consumers.ChatConsumer )
]

и маршрутизация для проекта:

# mysite/routing.py
from channels.auth import AuthMiddlewareStack
#hooking into auth that django provides^

from channels.routing import ProtocolTypeRouter, URLRouter
from channels.security.websocket import AllowedHostsOriginValidator
import myapp.routing
from django.core.asgi import get_asgi_application
# the allowedhosts is for what ever is in your allowehost in setting.py
application = ProtocolTypeRouter({
    # (http->django views is added by default)
    #"http": get_asgi_application(),
    'websocket': AllowedHostsOriginValidator(
         #AuthMiddlewareStack(
          URLRouter(
            myapp.routing.websocket_urlpatterns
       # )
    )
    ),
})


Итак, что происходит: я пытаюсь установить соединение. и оно начинает квитирование. затем сразу же отклоняется и разъединяется.

2) Связано ли это с тем, что я не обеспечил аутентификацию сокета через заголовок? Или есть что-то, что я упустил на стороне flutter. Примечание: мои обычные Http запросы работают отлично.

  1. is there a way to add header to authenticate with TOKEN when sending a connect attempt with a websocet. in (webSocketCHannel.connect(...)

заранее спасибо, я знаю, что это длинный пост!!!

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