不是Access-Control-Allow-Origin *,但Chrome坚持认为是(升级apollo服务器后)

q.T*_*hen 2 javascript cors apollo

我有一些想要的功能,apollo-server并花了一些时间将代码重构为它(以前使用express-graphql)。现在唯一的问题是我的Web应用程序之间(使用apollo-client)用于经过身份验证的请求之间存在“ CORS”问题。我记得在1.x版本中也遇到过这个问题,并花了很多时间来解决这个问题,但是我以前的解决方案在2.x版本中不起作用,对于能成功解决此问题的任何人,我们将不胜感激。工作。

  • 我的网络应用托管在 localhost:8081
  • 我的服务器托管在 localhost:4000

这里逐字逐句地看一下代码,我有以下内容:

客户代码

const client = new ApolloClient({
    link: createHttpLink({
        uri: 'http://localhost:4000/graphql', 
        credentials: 'include'
    })
})
Run Code Online (Sandbox Code Playgroud)

服务器代码

// Initializing express app code 
var app = ....
// Using cors
app.use(cors({
    credentials: true, 
    origin: 'http://localhost:8081',
}));

// Apollo Server create and apply middleware
var apolloServer = new ApolloServer({ ... });
apolloServer.applyMiddleware({ app })
Run Code Online (Sandbox Code Playgroud)

当客户端通过查询后端时。apollo-client,我在Chrome中收到以下错误:

在此处输入图片说明

但是,在服务器代码中,我明确设置了起点。当我在控制台中检查网络请求时,我得到了一个矛盾的故事,并且Access-Control-Allow-Origin显式设置为http://localhost:8081

在此处输入图片说明

使用Insomnia查询后端服务器并获得预期结果时,我没有遇到此问题。是否有人apollo在客户端和服务器上进行设置localhost并成功进行身份验证有经验?

q.T*_*hen 5

我其实只是傻瓜。我正在查看错误的响应,将sideshowbarker放在其上,会apollo-server-v2自动覆盖CORS并将Access-Control-Allow-Origin标题默认设置为*。即使您的快速应用程序指定了CORS并将其作为中间件应用到apollo-server,该设置也会被GraphQL路由覆盖。如果有人遇到此问题,希望可以节省一些时间:

https://github.com/apollographql/apollo-server/issues/1142

您现在可以apollo-server在其applyMiddleware方法中明确为其指定CORS :https : //www.apollographql.com/docs/apollo-server/api/apollo-server.html#Parameters-2