Apollo-link: [Error] apollo-link-context "setContext" no envía contexto

Creado en 11 dic. 2017  ·  4Comentarios  ·  Fuente: apollographql/apollo-link

Resultado esperado:
Estoy tratando de usar la función "setContext" para configurar un token de forma asincrónica.
Espero encontrar el token establecido en "setContext" en el encabezado de mi solicitud o en otro lugar.

(Consulte el código sobre cómo reproducir el problema).

Resultado real:
La solicitud nunca contiene mi token ni ningún contexto que esté enviando.
Tampoco funciona de forma sincrónica.

esta es la solicitud que recibo:

{datos: {}, \ n contexto: \ n {solicitud: {sourceIp: '110.169.68.32', encabezados: {}, httpMethod: 'post'}, \ n auth: null, \ n sessionCache: {}, \ n ambiente: {}, \ n graphcool: \ n {rootToken: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MTI5NzkxNzEsImlhdCI6MTUxMjk3ODg3MSwiY2xpZW50SWQiOiJfIiwicHJvamVjdElkIjoiY2o5dnAwMzloMTl2bjAxNDhlc3UzbnYzMSIsInBlcm1hbmVudEF1dGhUb2tlbklkIjoiY2piMXdrMHR2NGExNDAxNTRxMXBrMnh0diJ9.WcqQchOGD-BwwwM4Nmh0zYoOpPk7YcGk1qzRcutDxmY', \ n criterios de valoración: [Object], \ n projectId: 'cj9vp039h19vn0148esu3nv31', \ n alias: nulo, \ n pat : 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MTI5NzkxNzEsImlhdCI6MTUxMjk3ODg3MSwiY2xpZW50SWQiOiJfIiwicHJvamVjdElkIjoiY2o5dnAwMzloMTl2bjAxNDhlc3UzbnYzMSIsInBlcm1hbmVudEF1dGhUb2tlbklkIjoiY2piMXdrMHR2NGExNDAxNTRxMXBrMnh0diJ9.WcqQchOGD-BwwwM4Nmh0zYoOpPk7YcGk1qzRcutDxmY', \ n serviceId: 'cj9vp039h19vn0148esu3nv31'}}}"

Cómo reproducir el problema:

import ApolloClient from "apollo-client";
import { HttpLink } from "apollo-link-http";
import { ApolloLink, concat } from "apollo-link";
import { InMemoryCache } from "apollo-cache-inmemory";
import { setContext } from "apollo-link-context";

const authMiddleware = setContext(request => {
  new Promise((success, fail) => {
    AsyncStorage.getItem(ProjectSettings.graphcoolKey).then(token => {
      success({
        headers: {
          authorization: 'Bearer ${token}'
        }
      });
    });
  });
});

const httpLink = new HttpLink({
  uri: ProjectSettings.simpleGraphCoolEndPoint
});

const client = new ApolloClient({
  link: concat(authMiddleware , httpLink),
  cache: new InMemoryCache()
});

Probé muchas combinaciones diferentes:

success({ token: 'async found token' })
success({ auth: 'async found token' })
success({ headers:  { auth: 'async found token' }})
...

Incluso la forma más sencilla no envía nada

const middleware = setContext((request, previousContext) => ({
  authorization: '1234'
}))

Comentario más útil

Al menos un problema en sus pasos de reproducción es que no está devolviendo la promesa, pero eso no explica por qué el ejemplo más simple no funciona para usted.

Todos 4 comentarios

Al menos un problema en sus pasos de reproducción es que no está devolviendo la promesa, pero eso no explica por qué el ejemplo más simple no funciona para usted.

@imranolas Muchas gracias, solucionó mi problema :)
No sé tampoco por el ejemplo simple, pero probablemente sea un pequeño error mío.

En realidad, copié / pegué el código de https://github.com/apollographql/apollo-link/tree/master/packages/apollo-link-context y agregué por error algunos corchetes: /

¡Gracias @imranolas por la ayuda!

Doc muestra:

success({ token: "async found token" })
if (token) return { token };
{  headers: { authorization: "1234"} }

y así.

Pero sólo

{  headers: { authorization: "1234"} }

me ha funcionado. Quiero decir que el campo header con objeto debe ser. Ese objeto se asignará al encabezado de la solicitud.

Otro ejemplo es confuso. Lo más probable es que sea un pseudocódigo o se puede suponer que tiene un procesamiento especial. Confunde y no ahorra tiempo.

¿Fue útil esta página
0 / 5 - 0 calificaciones