1. ホーム
  2. graphql

[解決済み] apolloサーバーでリゾルバにコンテキストを設定できない

2022-02-16 05:26:45

質問

こんにちは、私はGraphQlとApollo Serverを初めて使う者です。 私のプロジェクトで認証を実装したいと思っています。

しかし

なぜか、apolloサーバーのリゾルバにコンテキストを設定することができないようです。

以下は私のインデックスです。

    const server = new ApolloServer({ 
        typeDefs, 
        resolvers, 
        context: ({ req }) => {
           const userId = jwtDecode(req.headers.authorization)
           return userId.sub
        }
    })

そして、私のクエリ

    Query: {
        users: async (parent, args, context) => {
            try {
                console.log(context)
                return await getUsers(context)
            } catch (err) {
                console.log(err)
                throw new Error(err.message)
            }
        }

When I try to output the context the result is always like this...


{ injector:
   Injector {
     options:
      { name: 'index.ts_8346047369535445_SESSION',
        injectorScope: 'SESSION',
        hooks: [Array],
        children: [] },
     _classMap: Map {},
     _factoryMap: Map {},
     _applicationScopeInstanceMap:
      Map {
        Symbol(ModuleConfig.index.ts_8346047369535445) => undefined,
        [Function] => undefined },
     _sessionScopeInstanceMap: Map { [Function: ModuleSessionInfo] => [ModuleSessionInfo] },
     _applicationScopeServiceIdentifiers:
      [ Symbol(ModuleConfig.index.ts_8346047369535445), [Function] ],
     _requestScopeServiceIdentifiers: [],
     _sessionScopeServiceIdentifiers: [ [Function: ModuleSessionInfo] ],
     _hookServiceIdentifiersMap: Map {},
     _name: 'index.ts_8346047369535445_SESSION',
     _injectorScope: 'SESSION',
     _defaultProviderScope: 'SESSION',
........


解決方法は?

の中で何が返されるのでしょうか? context 関数は常にオブジェクトであるべきです。ですから、次のようなことをするのです。

context: ({ req }) => {
  const { sub } = jwtDecode(req.headers.authorization)
  return {
    sub,
  }
}

を呼び出して、リゾルバ内の値にアクセスします。 context.sub .

しかし、スキーマの作成にGraphQL Modulesを使用している場合は、ライブラリの ドキュメント を使用して、モジュール単位でコンテキストを設定します。