如何使用Express和Apollo服务器获取HTTP授权标头

编程入门 行业动态 更新时间:2024-10-10 08:25:59

<a href=https://www.elefans.com/category/jswz/34/1771452.html style=如何使用Express和Apollo服务器获取HTTP授权标头"/>

如何使用Express和Apollo服务器获取HTTP授权标头

我无法访问我的Apollo服务器上每个HTTP请求(通过express实现的“授权”标头)。这是我的express,Apollo-Server,CORS等设置。

const corsConfig = {
  credentials: true,
  allowedHeaders: ['Authorization'],
  exposedHeaders: ['Authorization']
};

const app = express()

const server = new ApolloServer({
    schema,
    context: ({ req }) => {
      return {
        req
      };
    }
  });

server.applyMiddleware({
  app,
  path,
  cors: corsConfig
});

http.createServer(app).listen(port, () => logger.info(`Service started on port ${port}`));

在我的解析器内部,我引入了上下文,尤其是req对象(这是一个graphQL端点解析器示例:]

const exampleQuery = async (parent, input , { req }) => {
    console.log(req.headers); 
    /*
    The output of this log:
      {
        'content-type': 'application/json',
         accept: '*/*',
        'content-length': '59',
        'user-agent': 'node-fetch/1.0 (+)',
        'accept-encoding': 'gzip,deflate',
         connection: 'close',
         host: 'localhost:3301',
        'Access-Control-Allow-Headers': 'Authorization',
        'Access-Control-Expose-Headers': 'Authorization'
    }

    */
}

我已通过“授权”标头向此端点发送了请求,其中包含令牌作为值。但是,Authorization标头不在req.headers对象中(实际上,它也不在整个req对象中)。我确定我对此端点的Postman / Insomnia HTTP请求正在发送Authorization标头,但是它似乎没有通过我的Apollo-Server。任何人都对为何未通过Authorization标头有任何见解?

回答如下:

例如,它按预期工作

server.ts

import { ApolloServer, gql, makeExecutableSchema } from 'apollo-server-express';
import express from 'express';
import http from 'http';

const corsConfig = {
  credentials: true,
  allowedHeaders: ['Authorization'],
  exposedHeaders: ['Authorization'],
};

const typeDefs = gql`
  type Query {
    hello: String
  }
`;
const resolvers = {
  Query: {
    hello: (_, __, { req }) => {
      console.log(req.headers);
      return 'world';
    },
  },
};
const schema = makeExecutableSchema({ typeDefs, resolvers });

const app = express();
const path = '/graphql';
const port = 3000;
const server = new ApolloServer({
  schema,
  context: ({ req }) => {
    return {
      req,
    };
  },
});
server.applyMiddleware({ app, path, cors: corsConfig });

http.createServer(app).listen(port, () => console.info(`Service started on port ${port}`));

通过curl发送GraphQL查询HTTP请求:

curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer abc123" --data '{ "query": "{ hello }" }' http://localhost:3000/graphql
{"data":{"hello":"world"}}

服务器端日志:

Service started on port 3000
{ host: 'localhost:3000',
  'user-agent': 'curl/7.54.0',
  accept: '*/*',
  'content-type': 'application/json',
  authorization: 'Bearer abc123',
  'content-length': '24' }

更多推荐

如何使用Express和Apollo服务器获取HTTP授权标头

本文发布于:2024-05-07 06:10:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1754716.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何使用   服务器   Apollo   Express   HTTP

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!