установка заголовка в клиенте apollo - PullRequest
0 голосов
/ 01 июня 2019

Я пытаюсь отправить заголовок авторизации в клиенте apollo и всегда получаю пустой заголовок в серверной части сервера apollo

код клиента

import React, { Component } from "react";
import { I18nManager } from "react-native";
// import {  } from "apollo-client";
import { ApolloClient, HttpLink, InMemoryCache } from "apollo-boost";
import { ApolloProvider } from "react-apollo";
import { AsyncStorage } from "react-native";

import Navigator from "./Navigator";
import { DATABASE_URL } from "./constants";

const App = () => {
    const client = new ApolloClient({
        link: new HttpLink({ uri: DATABASE_URL }),
        cache: new InMemoryCache(),
        request: async operation => {
            const token = await AsyncStorage.getItem("auth-token");
            operation.setContext({
                headers: {
                    authorization: token
                }
            });
        },
        onError: ({ networkError, graphQLErrors }) => {
            console.log("graphQL Error", graphQLErrors);
            console.log("network Error", networkError);
        }
    });
    I18nManager.forceRTL(true);

    return (
        <ApolloProvider client={client}>
            <Navigator />
        </ApolloProvider>
    );
};

export default App;

, и это код серверагде я пытаюсь получить доступ к значению заголовка


const context = ({ req }) => {
  const token = req.headers.authorization || "";
  console.log("auth token", token);
  return token;
};
module.exports = new ApolloServer({
  typeDefs,
  resolvers,
  playground: true,
  introspection: true,
  context
});

я всегда получаю это сообщение об ошибке, когда пытаюсь запустить мутацию, требующую аутентификации заголовка GraphQL error: jwt must be provided

edit: это однокода решателя, где я пытаюсь получить токен

function addEdit(root, { newData, procedureID, editType }, { token }) {
  let userID = "";
  console.log(token);
  try {
    userID = jwt.verify(token, secret);
    console.log(userID);
  } catch (error) {
    console.log("error");
    return error;
  }
  console.log("id", userID);
  const edit = new Edit({ newData, userID, procedureID, editType });
  return edit
    .save()
    .then(() => {
      return {
        success: true
      };
    })
    .catch(error => {
      return {
        success: false,
        error
      };
    });
}
...