Graphql Apollo解析程序内的Req无法使用Passport用户 我正在使用Koa、阿波罗和Passport,我很难从阿波罗解决方案中的Req.用户访问护照用户。我还有一个简单的REST端点。当我沿着rest端点从路由器调用ctx.req.user时,它会返回用户名、电子邮件等

Graphql Apollo解析程序内的Req无法使用Passport用户 我正在使用Koa、阿波罗和Passport,我很难从阿波罗解决方案中的Req.用户访问护照用户。我还有一个简单的REST端点。当我沿着rest端点从路由器调用ctx.req.user时,它会返回用户名、电子邮件等,graphql,passport.js,apollo,koa,Graphql,Passport.js,Apollo,Koa,但是,Apollo解析器中的相同req.user语句返回为未定义。如果我只调用ctx.req,那么我可以将完整请求记录到包含cookie/会话的控制台 我怀疑(主要是因为我尝试了所有其他方法)可能会发生这种情况,因为我在应用Passport中间件之前在app.ts文件中创建了Apollo服务器。然而,我不确定情况是否如此,我也不知道该做些什么改变。为了改变这一点,我也很慢地将我大部分工作的代码库分开 //app.ts import Koa = require('koa'); import {

但是,Apollo解析器中的相同req.user语句返回为未定义。如果我只调用ctx.req,那么我可以将完整请求记录到包含cookie/会话的控制台

我怀疑(主要是因为我尝试了所有其他方法)可能会发生这种情况,因为我在应用Passport中间件之前在app.ts文件中创建了Apollo服务器。然而,我不确定情况是否如此,我也不知道该做些什么改变。为了改变这一点,我也很慢地将我大部分工作的代码库分开

//app.ts

import  Koa = require('koa');
import { getGraphqlApp} from './graphql/get-apollo-server'
import { config } from './config/config';
import { BaseContext } from 'koa';
import * as passport from 'koa-passport';

//Create the Apollo Server and the Koa App
const server = getGraphqlApp();
const app = new Koa();

console.log()
//Apply the App onto the Apollo Server
server.applyMiddleware({ app, path: config.graphqlUri });

//Export the App so that we can import it in server.ts
module.exports = app;
import { makeAugmentedSchema } from 'neo4j-graphql-js';
import { ApolloServer } from 'apollo-server-koa';
import {typeDefs} from './get-graphql-schema'//../typeDefs';
import { getNeo4jDriver} from '../database/connection-neo4j'
import resolvers from './resolvers'

const driver = getNeo4jDriver();

export function getGraphqlApp(): ApolloServer {
  const schema = makeAugmentedSchema({
    typeDefs,
    resolvers,
    config: {
      query: false,
      mutation: false
    }
    //resolverValidationOptions: { requireResolversForResolveType: false }
  });

  const graphqlOptions = {
    schema,
    context: (
      { ctx }
    ) => {
      return {
        driver,
        ctx
      };
    },
    playground: true,
    formatError: error => {
      return error
    },
    introspection: true
  };
  return new ApolloServer(graphqlOptions);
}
import { neo4jgraphql } from "neo4j-graphql-js";

const resolvers = {
  Query: {
    Dataset(object, params, ctx, resolveInfo) {
      return neo4jgraphql(object, params, ctx, resolveInfo);
    },
    DatasetAttributes(object, params, ctx, resolveInfo) {
      return neo4jgraphql(object, params, ctx, resolveInfo);
    },


    Idiom(object, params, ctx, resolveInfo) {

      console.log(ctx.ctx.req.user)

      if (!1) {
        throw new Error("request not authenticated");
      } else {
        return neo4jgraphql(object, params, ctx, resolveInfo);
      }
    },
   }
};

export default resolvers;
//获取apollo server.ts

import  Koa = require('koa');
import { getGraphqlApp} from './graphql/get-apollo-server'
import { config } from './config/config';
import { BaseContext } from 'koa';
import * as passport from 'koa-passport';

//Create the Apollo Server and the Koa App
const server = getGraphqlApp();
const app = new Koa();

console.log()
//Apply the App onto the Apollo Server
server.applyMiddleware({ app, path: config.graphqlUri });

//Export the App so that we can import it in server.ts
module.exports = app;
import { makeAugmentedSchema } from 'neo4j-graphql-js';
import { ApolloServer } from 'apollo-server-koa';
import {typeDefs} from './get-graphql-schema'//../typeDefs';
import { getNeo4jDriver} from '../database/connection-neo4j'
import resolvers from './resolvers'

const driver = getNeo4jDriver();

export function getGraphqlApp(): ApolloServer {
  const schema = makeAugmentedSchema({
    typeDefs,
    resolvers,
    config: {
      query: false,
      mutation: false
    }
    //resolverValidationOptions: { requireResolversForResolveType: false }
  });

  const graphqlOptions = {
    schema,
    context: (
      { ctx }
    ) => {
      return {
        driver,
        ctx
      };
    },
    playground: true,
    formatError: error => {
      return error
    },
    introspection: true
  };
  return new ApolloServer(graphqlOptions);
}
import { neo4jgraphql } from "neo4j-graphql-js";

const resolvers = {
  Query: {
    Dataset(object, params, ctx, resolveInfo) {
      return neo4jgraphql(object, params, ctx, resolveInfo);
    },
    DatasetAttributes(object, params, ctx, resolveInfo) {
      return neo4jgraphql(object, params, ctx, resolveInfo);
    },


    Idiom(object, params, ctx, resolveInfo) {

      console.log(ctx.ctx.req.user)

      if (!1) {
        throw new Error("request not authenticated");
      } else {
        return neo4jgraphql(object, params, ctx, resolveInfo);
      }
    },
   }
};

export default resolvers;
//解析器.ts

import  Koa = require('koa');
import { getGraphqlApp} from './graphql/get-apollo-server'
import { config } from './config/config';
import { BaseContext } from 'koa';
import * as passport from 'koa-passport';

//Create the Apollo Server and the Koa App
const server = getGraphqlApp();
const app = new Koa();

console.log()
//Apply the App onto the Apollo Server
server.applyMiddleware({ app, path: config.graphqlUri });

//Export the App so that we can import it in server.ts
module.exports = app;
import { makeAugmentedSchema } from 'neo4j-graphql-js';
import { ApolloServer } from 'apollo-server-koa';
import {typeDefs} from './get-graphql-schema'//../typeDefs';
import { getNeo4jDriver} from '../database/connection-neo4j'
import resolvers from './resolvers'

const driver = getNeo4jDriver();

export function getGraphqlApp(): ApolloServer {
  const schema = makeAugmentedSchema({
    typeDefs,
    resolvers,
    config: {
      query: false,
      mutation: false
    }
    //resolverValidationOptions: { requireResolversForResolveType: false }
  });

  const graphqlOptions = {
    schema,
    context: (
      { ctx }
    ) => {
      return {
        driver,
        ctx
      };
    },
    playground: true,
    formatError: error => {
      return error
    },
    introspection: true
  };
  return new ApolloServer(graphqlOptions);
}
import { neo4jgraphql } from "neo4j-graphql-js";

const resolvers = {
  Query: {
    Dataset(object, params, ctx, resolveInfo) {
      return neo4jgraphql(object, params, ctx, resolveInfo);
    },
    DatasetAttributes(object, params, ctx, resolveInfo) {
      return neo4jgraphql(object, params, ctx, resolveInfo);
    },


    Idiom(object, params, ctx, resolveInfo) {

      console.log(ctx.ctx.req.user)

      if (!1) {
        throw new Error("request not authenticated");
      } else {
        return neo4jgraphql(object, params, ctx, resolveInfo);
      }
    },
   }
};

export default resolvers;

问题是,在我将Passport应用到应用程序之前,我启动了Apollo服务器。我按照以下要求重新处理了app.ts文件,并从server.ts中删除了passport部分以使其正常工作:

import  Koa = require('koa');
import { getGraphqlApp} from './graphql/get-apollo-server'
import { config } from './config/config';
import { BaseContext } from 'koa';
import * as session from 'koa-session';
import * as passport from 'koa-passport';

//Create the Apollo Server and the Koa App
const server = getGraphqlApp();
const app = new Koa();

//Setup the session
app.keys = ['infornite-secret-key'];
app.use(session(app));

//Setup Authentication
require('./config/auth');
app.use(passport.initialize());
app.use(passport.session());

//Apply the App onto the Apollo Server
server.applyMiddleware({ app, path: config.graphqlUri });

//Export the App so that we can import it in server.ts
module.exports = app;