在 Apollo GraphQL 游乐场(版本 3)中允许 Cookie

Ani*_*ddh 1 cookies graphql apollo-server graphql-playground

根据阿波罗文档

如果您的服务器使用 cookie 进行身份验证,您可以将端点配置为与https://studio.apollographql.com共享这些 cookie 。要进行此设置,您的 cookie 值必须包含SameSite=None; Secure. 此外,这些 CORS 标头必须存在于服务器对 Studio 的响应中:

Access-Control-Allow-Origin: https://studio.apollographql.com
Access-Control-Allow-Credentials: true
Run Code Online (Sandbox Code Playgroud)

我已经完成了那里提到的所有事情。我使用的是express,所以我使用cors中间件来设置标头:

 app.use(
    cors({
      credentials: true,
      origin: "https://studio.apollographql.com",
    })
  );
Run Code Online (Sandbox Code Playgroud)

但每当我在操场上打开“允许 Cookie”的开关时,状态都会变成红色(即“无法到达服务器”)。我的编辑器和nodemon没有显示错误。关闭“允许 Cookie”开关可以解决问题,但会禁用 Cookie 功能。

我该如何解决这个问题?

小智 6

如果您使用 cors 中间件,您可能需要将 apollo.applyMiddleware 中的 cors 设置为 false 并让您的 cors 中间件正常工作。

  app.use(
    cors({
      credentials: true,
      origin: "https://studio.apollographql.com",
    })
  );

...

  apolloServer.applyMiddleware({
    app,
    cors: false, 
  });
Run Code Online (Sandbox Code Playgroud)

或者,您也可以使用 apollo-server 提供的 cors 选项。

  apolloServer.applyMiddleware({
    app,
    cors: {
      origin: 'https://studio.apollographql.com',
      credentials: true,
    },
  });
Run Code Online (Sandbox Code Playgroud)