如何在订阅中使用express会话

如何在订阅中使用express会话,express,apollo,apollo-server,express-session,Express,Apollo,Apollo Server,Express Session,我正在使用express session作为处理会话的中间件,而查询和变异都可以正常工作。但我就是不知道如何处理订阅会话 const app = express(); const server = http.createServer(app); const RedisStore = connectRedis(session); const bootstrap = async () => { await createConnection(); const schema =

我正在使用
express session
作为处理会话的中间件,而查询变异都可以正常工作。但我就是不知道如何处理订阅会话

const app = express();
const server = http.createServer(app);
const RedisStore = connectRedis(session);

const bootstrap = async () => {
    await createConnection();
    const schema = await createSchema();

    const store = new RedisStore({
        client: redis as any,
        logErrors: true
    });

    const apolloServer = new ApolloServer({
        schema,
        context: ({req, res}: ExpressContext) => {
            return ({req, res});
        },
        subscriptions: {
            onConnect: (_, __, context: ConnectionContext) => {
                console.log('context', context.request.headers);
            }
        }
    });

    const PORT = process.env.port || 4000;

    app.use(cookieParser());

    //Session middleware before resolvers
    app.use(session({
        store,
        name: COOKIE_NAME,
        secret: config.get('session_secret'),
        resave: false,
        saveUninitialized: false,
        cookie: {
            httpOnly: true,
            secure: process.env.NODE_ENV === "production",
            maxAge: 1000 * 60 * 60 * 24 * 365 // 1 year
        }
    }));

    apolloServer.applyMiddleware({app});
    apolloServer.installSubscriptionHandlers(server);

    //`listen` on the http server variable, and not on `app`.
    server.listen(PORT, () => {
        console.log(`Server ready at http://localhost:${PORT}${apolloServer.graphqlPath}`);
        console.log(`Subscriptions ready at ws://localhost:${PORT}${apolloServer.subscriptionsPath}`);
    })
};

bootstrap().catch(e => console.log(e));

这就是在解析器中获取用户ID的方式

req.session.userId;
如何在WebSockets中使用类似的方式