Apollo-link: [Bug] apollo-link-context "setContext" n'envoie pas le contexte

Créé le 11 déc. 2017  ·  4Commentaires  ·  Source: apollographql/apollo-link

Résultat escompté :
J'essaie d'utiliser la fonction "setContext" pour définir un jeton de manière asynchrone.
Je m'attends à trouver le jeton défini dans "setContext" dans l'en-tête de ma demande ou ailleurs.

(Voir le code dans comment reproduire le problème).

Résultat réel :
La demande ne contient jamais mon jeton ni aucun contexte que j'envoie.
Ne fonctionne pas non plus de manière synchrone.

voici la demande que je reçois :

{ data : {},\n contexte : \n { request : { sourceIp : '110.169.68.32', headers : {}, httpMethod : 'post' },\n auth : null,\n sessionCache : {},\ n environnement: {}, \ n graphcool: \ n {rootToken: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MTI5NzkxNzEsImlhdCI6MTUxMjk3ODg3MSwiY2xpZW50SWQiOiJfIiwicHJvamVjdElkIjoiY2o5dnAwMzloMTl2bjAxNDhlc3UzbnYzMSIsInBlcm1hbmVudEF1dGhUb2tlbklkIjoiY2piMXdrMHR2NGExNDAxNTRxMXBrMnh0diJ9.WcqQchOGD-BwwwM4Nmh0zYoOpPk7YcGk1qzRcutDxmY', \ n points de terminaison: [objet], \ n projectID: 'cj9vp039h19vn0148esu3nv31', \ n alias: null, \ n pat : 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MTI5NzkxNzEsImlhdCI6MTUxMjk3ODg3MSwiY2xpZW50SWQiOiJfIiwicHJvamVjdElkIjoiY2o5dnAwMzloMTl2bjAxNDhlc3UzbnYzMSIsInBlcm1hbmVudEF1dGhUb2tlbklkIjoiY2piMXdrMHR2NGExNDAxNTRxMXBrMnh0diJ9.WcqQchOGD-BwwwM4Nmh0zYoOpPk7YcGk1qzRcutDxmY', \ n serviceId: 'cj9vp039h19vn0148esu3nv31'}}} »

Comment reproduire le problème :

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()
});

J'ai essayé beaucoup de combinaisons différentes :

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

Même le moyen le plus simple n'envoie rien

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

Commentaire le plus utile

Au moins un problème dans vos étapes de reproduction est que vous ne retournez pas la promesse, mais cela n'explique pas pourquoi l'exemple le plus simple ne fonctionne pas pour vous.

Tous les 4 commentaires

Au moins un problème dans vos étapes de reproduction est que vous ne retournez pas la promesse, mais cela n'explique pas pourquoi l'exemple le plus simple ne fonctionne pas pour vous.

@imranolas Merci beaucoup, cela a résolu mon problème :)
Je ne sais pas non plus pour l'exemple simple, mais c'est probablement une petite erreur de ma part.

En fait, j'ai copié/collé le code de https://github.com/apollographql/apollo-link/tree/master/packages/apollo-link-context et ajouté par erreur quelques crochets :/

Merci @imranolas pour l'aide !

Le document montre :

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

etc.

Mais, seulement

{  headers: { authorization: "1234"} }

est travaillé pour moi. Je veux dire que le champ header avec l'objet doit être. Cet objet sera mappé à l'en-tête de la demande.

Un autre exemple est confiseur. Très probablement, il s'agit d'un pseudo-code ou on peut supposer qu'il a un traitement spécial. Cela perturbe et ne fait pas gagner de temps.

Cette page vous a été utile?
0 / 5 - 0 notes