Я работаю над приложением для личного чата, используя fastapi, Python Socketio и React. Я установил приложение Socketio при запуске fastapi. Теперь возникает проблема: когда я пытаюсь подключиться к сокету, возникает та или иная ошибка Cors, например, ошибка дублированного источника, смешанного контента или контроля доступа-разрешить-исходное значение имеет значение null или loclahost:3000 не является принятым источником. или заголовки не могут быть «». Для CorsMiddleware я пробовал разные записи в разрешении_origins, такие как передача «» или конкретного IP-адреса с их портами, но безрезультатно. Также для сокета Asyncserver, когда я сохраняю cors_allowed_origins как пустой список, кажется, работает поскольку cors отключен для сокета, но я хочу разрешить только определенные адреса. Я совсем застрял и также ссылался на другие сообщения и статьи. Любая помощь высоко ценится. Спасибо
Вот мой код для события запуска fastapi и сервера сокетов:
#app.py
@app.on_event("startup")
async def init_resources() -> None:
socketio_server = SocketIOServer().init(room_namespace=room_namespace)
sio_app = socketio.ASGIApp(
socketio_server=socketio_server, socketio_path="", other_asgi_app=app
)
app.mount("/socket.io", sio_app)
return app
#socket_server.py
def init(self, room_namespace: RoomNamespace, *args: Any, **kwargs: Any) -> socketio.AsyncServer:
self.sio = socketio.AsyncServer(
async_mode="asgi",
cors_allowed_origins=[],
logger=True,
engineio_logger=True,
)
self.sio.register_namespace(room_namespace)
return self.sio
Код реакции для сокета
const socket = io(import.meta.env.VITE_SOCKET_SERVER_URI, {
// transports: ['Socket', 'polling', 'flashsocket'],
auth: {
token: tokens?.access
},
withCredentials: true
});
Подробнее здесь: https://stackoverflow.com/questions/785 ... nd-fastapi