Всем ку! Пытаюсь отправить куки в браузер с помощью такого кода:
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-рукопожатия?