如何将请求标头传递给 graphql 解析器
Posted
技术标签:
【中文标题】如何将请求标头传递给 graphql 解析器【英文标题】:How to pass request headers through to graphql resolvers 【发布时间】:2018-09-21 09:29:26 【问题描述】:我有一个由 JWT 授权的 graphql 端点。我的 JWT 策略验证 JWT,然后将用户对象添加到请求对象。
在一条安静的路线中,我会像这样访问我的用户数据:
router.get('/', (req, res, next) =>
console.log('user', req.user)
我想在我的 graphql 解析器中访问 req.user 对象以提取用户的 ID。但是,当我尝试记录 context
变量时,它始终为空。
我是否需要配置我的 graphql 端点以将 req
数据传递给解析器?
我的 app.js 的 graphql 设置如下:
import graphqlExpress, graphiqlExpress from 'apollo-server-express';
app.use('/graphql', [passport.authenticate('jwt', session: false ), bodyParser.json()], graphqlExpress( schema ));
然后我有这样的解析器:
const resolvers =
Query:
user: async (obj, email, context) =>
console.log('obj', obj) // undefined
console.log('email', email) // currently passed through in graphql query but I want to replace this with the user data passed in req / context
console.log('context', context) //
return await UserService.findOne(email)
,
;
// Put together a schema
const schema = makeExecutableSchema(
typeDefs,
resolvers,
);
如何在解析器中访问我的 JWT 用户数据?
【问题讨论】:
【参考方案1】:显然你需要像这样手动传递上下文:
app.use('/graphql', [auth_middleware, bodyParser.json()], (req, res) => graphqlExpress( schema, context: req.user )(req, res) );
如果有人感兴趣,找到答案here:
【讨论】:
以上是关于如何将请求标头传递给 graphql 解析器的主要内容,如果未能解决你的问题,请参考以下文章
传递给解析器不是有效的 GraphQL DocumentNode。您可能需要使用“graphql-tag”或其他方法将您的操作转换为文档
如何使用 Aws AppSync 将 JWT 令牌(或任何其他变量)从父解析器传递给子解析器
我们如何从 apollo-server 模块传递 ApolloServer 中的数据源和合并的 graphql 模式和解析器?