Заголовок авторизации отсутствует в запросе Graphql - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть:

  1. Внешний интерфейс: React, Next.js.Использует клиент Apollo.

  2. Серверная часть: NodeJs, сервер Express с конечной точкой GraphQL.

Я применяю файл cookie к клиенту GraphQL apollo, вот кодинстанцирование.

  ({ ctx, headers, initialState }) =>
    new ApolloClient({
      uri: "http://localhost:4000/graphql",
      cache: cache,
      credentials: 'include',
      headers: {
      authorization: Cookies.get('token') ? `Bearer ${Cookies.get('token')}` : ""},
      typeDefs,
      resolvers
      }));

Когда я использую useQuery в своем компоненте React, я отправляю запрос graphQL бэкэнду.У меня установлено промежуточное ПО для проверки подлинности запроса путем проверки на токен.Код:

export let checkToken = (req : any, res : any, next : any) => {
  let token = req.headers['authorization']; // I also tried req.headers.authorization
  if (token.startsWith('Bearer ')) {
    token = token.slice(7, token.length);
  }

  if (token) {
    jwt.verify(token, config.cookieKey, (err : any, decoded : any) => {
      if (err) {
        Logger.info("Token in request is not valid.");
        return res.json({
          success: false,
          message: 'Token is not valid'
        });
      } else {
        Logger.info("Token in request is valid.");
        req.decoded = decoded;
        next();
      }
    });
  } else {
    Logger.info("No token in request found.");
    return res.json({
      success: false,
      message: 'Auth token is not supplied'
    });
  }
};

Проблема в том, что req.headers.authorization не определен, как только он достигает бэкэнда.Я консоль зарегистрировала токен cookie ранее на стороне клиента, и он действительно возвращает cookie.

CORS EDIT

 app.use(function(_req, res, next) {
      res.header("Access-Control-Allow-Origin", `${config.frontend_url}`);
      res.header('Access-Control-Allow-Methods', "GET,HEAD,OPTIONS,POST,PUT");
      res.header("Access-Control-Allow-Credentials", "true");
      res.header('Access-Control-Allow-Headers', "Access-Control-Allow-Origin, Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization");
      next();
    });

Console.log (req.headers) edit

{ accept: '*/*',
  'content-type': 'application/json',
  authorization: '',
  'content-length': '185',
  'user-agent': 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)',
  'accept-encoding': 'gzip,deflate',
  connection: 'close',
  host: 'localhost:4000' }

{ accept: '*/*',
  'content-type': 'application/json',
  authorization: '',
  'content-length': '185',
  'user-agent': 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)',
  'accept-encoding': 'gzip,deflate',
  connection: 'close',
  host: 'localhost:4000' }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...