Chapter 44

security-cors

kisihara.c
kisihara.c
2021.07.13に更新
このチャプターの目次

cors

CORS(Cross-Origin Resource Sharing)とは、別のドメインからリソースを要求できるようにするメカニズムだ。NestではExpressのcorsパッケージを使用している。このパッケージには様々なオプションが用意されており、必要に応じてカスタマイズできる。

始める

CORSを有効にするには、NestアプリケーションオブジェクトのenableCors()メソッドを呼び出す。

const app = await NestFactory.create(AppModule);
app.enableCors();
await app.listen(3000);

enableCors()メソッドは、オプションで設定オブジェクトの引数を取る。このオブジェクトの利用可能なプロパティについては、CORSの公式ドキュメントに記載されている。また、コールバック関数を渡す事で、リクエストに応じて(動的に)非同期に設定オブジェクトを定義することもできる。

create()メソッドのオプションオブジェクトでもCORSを有効にできる。デフォルトの設定でCORSを有効にするには、corsプロパティをtrueに設定する。また、corsプロパティの値として、CORS設定オブジェクトコールバック関数を渡して動作をカスタマイズする事もできる。

const app = await NestFactory.create(AppModule, { cors: true });
await app.listen(3000);

前述の方法はRESTエンドポイントにのみ適用される。

GraphQLでCORSを有効にするには、corsプロパティをtrueに設定するか、GraphQLモジュールのインポート時にcorsプロパティの値としてCORS設定オブジェクトまたはコールバック関数を渡してほしい。

WARNING
CorsOptionsDelegateソリューションはapollo-server-fastifyパッケージではまだ動かない。

GraphQLModule.forRoot({
  cors: {
    origin: 'http://localhost:3000',
    credentials: true,
  },
}),