繁体   English   中英

如何将请求标头传递到graphql解析器

[英]How to pass request headers through to graphql resolvers

我有一个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用户数据?

显然,您需要像这样手动传递上下文:

app.use('/graphql', [auth_middleware, bodyParser.json()], (req, res) => graphqlExpress({ schema, context: req.user })(req, res) );

如果有人感兴趣,请在这里找到答案:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM