Javascript 阿波罗客户端&x2B;Express Graphql后端-会话不持久?

Javascript 阿波罗客户端&x2B;Express Graphql后端-会话不持久?,javascript,session-cookies,apollo,apollo-client,Javascript,Session Cookies,Apollo,Apollo Client,我想我一定没有得到什么。我正在尝试将apollo客户端localhost:8000连接到后端localhost:4000,客户端和服务器位于不同的域上。我在前端使用apollo(apollo boost),在后端使用express graphql(不是(!)apollo server) 当我从客户机向服务器发送一些登录数据时,我会得到一个响应:一个用户对象,或者错误等等,这很好。但是,用户从未真正登录到服务器(当我签入graphiql并请求用户对象时,它总是空的) 我不知道这是否是一个CORS问

我想我一定没有得到什么。我正在尝试将apollo客户端
localhost:8000
连接到后端
localhost:4000
,客户端和服务器位于不同的域上。我在前端使用apollo(
apollo boost
),在后端使用
express graphql
不是(!)apollo server

当我从客户机向服务器发送一些登录数据时,我会得到一个响应:一个用户对象,或者错误等等,这很好。但是,用户从未真正登录到服务器(当我签入graphiql并请求用户对象时,它总是空的)


我不知道这是否是一个CORS问题,因为当我的客户端和服务器都在同一个域上时,事情就正常了

以下是客户端代码:

import ApolloClient from "apollo-boost"
import fetch from "isomorphic-fetch"
import { HttpLink } from "apollo-link-http"
import { InMemoryCache } from "apollo-cache-inmemory"

const cache = new InMemoryCache()

const link = new HttpLink({
  // uri: "http://localhost:4000/graphql",
  credentials: "include",
})


export const client = new ApolloClient({
  cache,
  fetch,
  link,
  dataIdFromObject: o => o.id,
  uri: "http://localhost:4000/graphql",
})
服务器上的相关位包括:

app.use(
  session({
    resave: true,
    saveUninitialized: true,
    secret: 'whatever',
    cookie: {
      secure: false
    },
    store: new MongoStore({
      url: MONGO_URI,
      autoReconnect: true
    })
  })
);

var corsOptions = {
  origin: 'http://localhost:8000',
  credentials: true
};
app.use(cors(corsOptions));
app.use(passport.initialize());
app.use(passport.session());

// Instruct Express to pass on any request made to the '/graphql' route
// to the GraphQL instance.
app.use(
  '/graphql',
  expressGraphQL({
    schema,
    graphiql: true
  })
);

看起来他们的API有点变化。 我通过在客户端执行以下操作修复了它:

import ApolloClient from "apollo-boost"
import fetch from "isomorphic-fetch"
import { InMemoryCache } from "apollo-cache-inmemory"

const cache = new InMemoryCache()

export const client = new ApolloClient({
  cache,
  fetch,
  link,
  credentials: "include",
  dataIdFromObject: o => o.id,
  uri: "http://localhost:4000/graphql",
})

所以我在Apollo客户端中加入了
凭证:“include”,
,而不是在httpLink中-实际上已经删除了该凭证。

“我不知道这是否是CORS问题”-您在浏览器控制台中是否收到一条提到CORS的错误消息?否。这是否意味着CORS正常?