LINUX.ORG.RU

Как отправить куки из websocket-сервера?

 , ,


1

4

Всем ку! Пытаюсь отправить куки в браузер с помощью такого кода:

import base64
import asyncio
from cryptography import fernet
from aiohttp import web, WSMsgType
from aiohttp.web import middleware
from aiohttp_session.cookie_storage import EncryptedCookieStorage
from aiohttp_session import get_session, session_middleware, SimpleCookieStorage


@middleware
async def authorize(request, handler):
   session = await get_session(request)
   session['test_key'] = 'test_value'

   # где-то тут отправить куки в браузер
   
   return await handler(request)


async def ws_handler(request):
   ws = web.WebSocketResponse()
   await ws.prepare(request)
   
   async for msg in ws:
      if msg.type == WSMsgType.TEXT:
         if msg.data == 'close':
            await ws.close()
         else:
            await ws.send_str(msg.data + '/answer')
      elif msg.type == WSMsgType.ERROR:
         print('ws connection closed with exception %s' %
            ws.exception())

   return ws


fernet_key = fernet.Fernet.generate_key()
secret_key = base64.urlsafe_b64decode(fernet_key)
middlewares = [
   session_middleware(EncryptedCookieStorage(secret_key)),
   authorize
]

app = web.Application(middlewares=middlewares)
app.router.add_get('/ws', ws_handler)
web.run_app(app)

При запросе с браузера ожидаю увидеть куку AIOHTTP_SESSION.

1) Что нужно изменить/добавить, чтобы кука уходила в браузер?
2) Когда ее лучше отправлять, до или во время (возможно ли, если да, тот как) websocket-рукопожатия?


Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.