Cómo usar subscriptions-transport-ws con pasaporte y sesión rápida

Estoy usando una estrategia local de pasaporte que funciona bien con express:

passport.use(localStrategy);
passport.serializeUser((user, done) => done(null, JSON.stringify(user)));
passport.deserializeUser((obj, done) => done(null, JSON.parse(obj)));
app.use(passport.initialize());
app.use(passport.session());

Esta LocalStrategy está haciendo una llamada Mongoose para que el usuario se base en su pubKey y supongo que request.user se rellena de esta manera.

Configuré mi punto final graphql de esta manera:

app.use('/graphql', bodyParser.json(), graphqlExpress(request => ({
  debug: true,
  schema,
  context: {
    user: request.user,
    req: request,
  },
  formatError: (e) => {
    console.log(JSON.stringify(e, null, 2));
    return e;
  },
})));

Y mis suscripciones de esta manera:

const ws = createServer(app);

// Run the server
ws.listen(settings.APP_PORT, () => {
  console.log(`App listening on port ${settings.APP_PORT}!`);
  // Set up the WebSocket for handling GraphQL subscriptions
  new SubscriptionServer({
    execute,
    subscribe,
    schema,
    onConnect: (connectionParams, webSocket) => {
      console.log(webSocket.upgradeReq);
      return { user: connectionParams };
    },
  }, {
    server: ws,
    path: '/subscriptions',
  });
});

Mi sesión está funcionando bien en consultas y mutaciones graphql. Pero no con mis suscripciones.

Mi objetivo es tener acceso a mi sesión de usuario en mi contexto de resolución de suscripción. Es posible que necesite acceder a algo como request.user en onConnect para completar el contexto, pero no sé cómo hacerlo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta