estoy construyendo una api de graphql usando apollo-server-express . Estoy usando jwt y cookies para la autenticación, por lo que en mis opciones cors, las credentials se establecen en verdadero, la cuestión es que, cuando las credentials se establecen en verdadero, Access-Control-Allow-Origin siempre es * , incluso si configuro el origin en mi cors opciones, todavía es * .
aquí está mi middleware:
app.use( cors({ origin: "https://studio.apollographql.com", credentials: true, }) ); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json({ limit: "2mb" })); app.use(cookieParser());Para reproducir necesita un servidor graphql y express.
// Initialize dotenv dotenv.config(); // Get env variables const PORT = process.env.PORT || 5000; // Create express server const app = express(); // Express server middleware app.use( cors({ credentials: true, origin: "https://studio.apollographql.com", }) ); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json({ limit: "2mb" })); app.use(cookieParser()); // Create new apollo server const gqlServer = new ApolloServer({ typeDefs: [typedefs], resolvers: { ...resolvers }, context: ({ req, res }: ContextType) => { // const { isValid, userData } = verifyToken(req.cookies?.xToken); return { // isLoggedIn: isValid, // userData: userData, req, res, }; }, }); (async () => { await gqlServer.start(); gqlServer.applyMiddleware({ app }); app.listen(PORT, () => { console.log(`Server listening on port ${PORT}`); }); })(); Luego, debe ir a localhost:5000/graphql , tocar query your server e ir a apolo. En Apollo Studio, en la parte superior izquierda, donde se muestra su URL (debe ser localhost:5000 ), debe haber un pequeño icono de engranaje (icono de configuración), puede tocarlo, luego ir a include cookies y configurarlo. Eso es todo, si ingresa a las herramientas de desarrollo en la pestaña de red, verá los errores cors de su servidor localhost:5000 y el valor de Access-Control-Allow-Origin es * . Por cierto, necesita configurar algunos resolutores y definiciones de tipos.
Resolví el problema, también necesitaba aplicar el cors middleware a mi servidor graphql.
gqlServer.applyMiddleware({ app, cors: { origin: "https://studio.apollographql.com", credentials: true, }, });