自動化無しに生活無し

WEB開発関係を中心に備忘録をまとめています

Django-channelsのAsyncWebsocketConsumerのscopeの内容【JWT認証+Sec-Websocket-Protocol】

thumbnail

AsyncWebsocketConsumer の scope の内容は以下の通り。

ただし、JWT認証をしており、Sec-Websocket-Protocol を使用している。

{ 
    'type': 'websocket',
    'path': '/ws/chat/1/',
    'raw_path': b'/ws/chat/1/',
    'root_path': '',
    'headers': [
        (b'host', b'localhost:8000'),
        (b'user-agent', b'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:134.0) Gecko/20100101 Firefox/134.0'),
        (b'accept', b'*/*'),
        (b'accept-language', b'ja,en-US;q=0.7,en;q=0.3'),
        (b'accept-encoding', b'gzip, deflate, br, zstd'),
        (b'sec-websocket-version', b'13'),
        (b'origin', b'http://localhost:3000'),
        (b'sec-websocket-protocol', b'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzM3MTg4NDg5LCJpYXQiOjE3MzcxODgzNDUsImp0aSI6IjI0OWRlMTUzMjY0YTQ4ZDE5YWVkZDJiODlhNTgwY2M5IiwidXNlcl9pZCI6MX0.hzS0uwx4LhPlM6wFJiIUpEkjVjkGpV87psw5MD1leyk'),
        (b'sec-websocket-extensions', b'permessage-deflate'),
        (b'sec-websocket-key', b'Q257WDS+ETm8KNLmj6cQiQ=='),
        (b'dnt', b'1'),
        (b'sec-gpc', b'1'),
        (b'connection', b'keep-alive, Upgrade'),
        (b'cookie', b'csrftoken=8ShA2y6HDOr794MF0TdrSnbEv76KCY0Y; _ga_HDX0LW64ZT=GS1.1.1737184513.53.1.1737184805.0.0.0;'),
        (b'sec-fetch-dest', b'empty'),
        (b'sec-fetch-mode', b'websocket'),
        (b'sec-fetch-site', b'same-site'),
        (b'pragma', b'no-cache'),
        (b'cache-control', b'no-cache'),
        (b'upgrade', b'websocket')
        ],
    'query_string': b'',
    'client': ['127.0.0.1', 35492],
    'server': ['127.0.0.1', 8000],
    'subprotocols': ['eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzM3MTg4NDg5LCJpYXQiOjE3MzcxODgzNDUsImp0aSI6IjI0OWRlMTUzMjY0YTQ4ZDE5YWVkZDJiODlhNTgwY2M5IiwidXNlcl9pZCI6MX0.hzS0uwx4LhPlM6wFJiIUpEkjVjkGpV87psw5MD1leyk'],
    'asgi': {'version': '3.0'},
    'user': <User: asahina>,
    'path_remaining': '',
    'url_route': {'args': (), 'kwargs': {'room_name': '1'}}
}

ユーザーエージェントやCookieのデータも含まれる。

今回、ミドルウェアなどで操作しているため、状況によって得られる内容は異なる。

どうやって確認する?

普通に、connectメソッドで、print文を実行すれば良い。

async def connect(self):
    print(self.scope)
スポンサーリンク