GraphQLロゴGraphQL

認証とExpressミドルウェア

graphql-httpと組み合わせて任意のExpressミドルウェアを使用するのは簡単です。特に、これは認証を処理するための優れたパターンです。

GraphQLリゾルバーでミドルウェアを使用するには、通常のExpressアプリと同様にミドルウェアを使用するだけです。その後、requestオブジェクトは任意のリゾルバーの2番目の引数として利用可能になります。

たとえば、すべてのリクエストのIPアドレスをサーバーにログ記録し、呼び出し元のIPアドレスを返すAPIも書きたいとします。 前者はミドルウェアで、後者はリゾルバー内のrequestオブジェクトにアクセスすることで実行できます。これを実装するサーバーコードを以下に示します。

var express = require("express")
var { createHandler } = require("graphql-http/lib/use/express")
var { buildSchema } = require("graphql")
var schema = buildSchema(`
type Query {
ip: String
}
`)
const loggingMiddleware = (req, res, next) => {
console.log("ip:", req.ip)
next()
}
var root = {
ip: function (args, request) {
return request.ip
},
}
var app = express()
app.use(loggingMiddleware)
app.all(
"/graphql",
createHandler({
schema: schema,
rootValue: root,
graphiql: true,
})
)
app.listen(4000)
console.log("Running a GraphQL API server at localhost:4000/graphql")

REST APIでは、認証は多くの場合、リクエストを行っているユーザーを証明する認証トークンを含むヘッダーで処理されます。Expressミドルウェアはこれらのヘッダーを処理し、認証データをExpressのrequestオブジェクトに配置します。 このような認証を処理するミドルウェアモジュールには、Passportexpress-jwtexpress-sessionなどがあります。これらの各モジュールはgraphql-httpで動作します。

これらの認証メカニズムに慣れていない場合は、将来の柔軟性を犠牲にすることなく簡単なため、express-jwtを使用することをお勧めします。

この時点までドキュメントを順を追って読んだのであれば、おめでとうございます!これで、実用的なGraphQL APIサーバーを構築するために必要なすべてを知ることができました。

続きを読む →型の構築