Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

219
Vistas
Apollo Server executeOperation con encabezados de autorización

¿Cómo pasamos los encabezados al servidor Apollo executeOperation en las pruebas?

Hay una mención sobre pasar un objeto de encabezados aquí

Estoy tratando de pasar un encabezado de autenticación con o sin un token JWT para probar el control de acceso.

 const result = await server.executeOperation({ query: query, http: { headers: { authorization: "" } } }) // Type '{ authorization: string; }' is not assignable to type 'Headers'. // Object literal may only specify known properties, and 'authorization' does not exist in type 'Headers'.ts(2322)

Esto da como resultado un error de tipo. Hay una clase de encabezados definida en los tipos de servidor Apollo en fetch.d.ts pero no puedo importar para crear una instancia.

Usando "apollo-server": "^2.25.2" . ¿Alguna sugerencia o enlace para que esto funcione?


Actualización: como solución, estoy descifrando y decodificando el JWT en el contexto del servidor y pasando un usuario autenticado allí. Entonces puedo simular todo el contexto y crear un nuevo servidor de prueba con el contexto simulado. Sería bueno poder usar encabezados para obtener más experiencia de producción, pero esto funciona por ahora.

 import { mockDeep, mockReset } from 'jest-mock-extended' interface Context { prisma: PrismaClient user: () => User|null } export const context = mockDeep<Context>() export const testServer = new ApolloServer({ typeDefs, resolvers, context }); // ... context.user.mockReturnValue({ id: 1, name: "Foo", slug: "foo", }) const res = await testServer.executeOperation({ query: query })
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Para resolver esto, he creado un objeto de solicitud 'falso' con el token JWT ya descifrado que usé para inicializar mi objeto de autenticación de terceros (keycloak) y pasar al contexto de apolo. Necesito inicializar el objeto keycloak porque tengo directivas de esquema de autenticación que requieren que se inicialice el objeto keycloak.

 const req = { kauth: { grant: { access_token: { isExpired: () => { return false; }, token: "abc", content: { email: "me@me.com", resource_access: { "my-api": { roles: ["admin"], }, }, }, }, }, }, }; server = new ApolloServer({ schema, resolvers, dataSources: () => ({ users, }), context: () => { return { kauth: new KeycloakContext({ req }) }; }, }); });

Aún así, me gustaría una solución que sea más nativa de apolo y no una solución alternativa.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda