Hello, I use koa and koa-passport for authorization via steam.
But koa and graphql have different contexts.
How to pass koa context to graphql?
router.get('/', (ctx) => {
console.log(ctx.state);
ctx.body = ''
})
in console:
{ _passport:
{ instance:
Authenticator {
_key: 'passport',
_strategies: [Object],
_serializers: [Array],
_deserializers: [Array],
_infoTransformers: [],
_framework: [Object],
_userProperty: 'user',
_sm: [SessionManager],
Authenticator: [Function: Authenticator],
Passport: [Function: Authenticator],
Strategy: [Function],
strategies: [Object],
KoaPassport: [Function: KoaPassport] },
session: { user: [Object] } },
user:
{ steamid: '76561198002188570',
name: 'Stolen',
avatar:
'https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/10/10986ae508588c55768d9d68697cb1391e398537.jpg' } }
Apollo server:
const apollo = new ApolloServer({
schema,
context: ({ ctx }) => ({ ctx })
})
...
apollo.applyMiddleware({ app })
my test resolver:
Query: {
test: (parent, args, ctx, info) => {
console.log(ctx.state);
return "testsQ"
}
}
in console:
undefined
Hi,
In the ApolloServer context method (context: ({ ctx }) => ({ ctx })), you are returning an object which contains a ctx key, with the koa context as value.
Then, in your resolver, you try to access ctx.state, but ctx here is an object (see above), and not the koa context.
So, either you access the context in the resolver this way :
Query: {
test: (parent, args, ctx, info) => {
console.log(ctx.ctx.state);
return "testsQ"
}
}
Or you return directly the koa context in the ApolloServer context method : context: ({ ctx }) => ctx
Bye
It seems this has been resolved.
Most helpful comment
Hi,
In the ApolloServer context method (
context: ({ ctx }) => ({ ctx })), you are returning an object which contains actxkey, with the koa context as value.Then, in your resolver, you try to access
ctx.state, butctxhere is an object (see above), and not the koa context.So, either you access the context in the resolver this way :
Or you return directly the koa context in the ApolloServer context method :
context: ({ ctx }) => ctxBye