nest.jsで開発をしていて、webhookを利用したい時に特定のパスだけcsurfチェックを外したい時に公式の説明とかだと「csrfのガードの前に特定のエンドポイントを設定する」方法しか書かれていなくてnestでは使えなかった。
そのため直接app.use(csurf())
するのではなく、ひと手間加えることで特定のパスを例外処理することができた
以下issueで紹介されていた方法をTypeScriptで型付し、optionを設定できるようにしたものです
import * as csurf from 'csurf' import {RequestHandler} from 'express' export function specificCsurf( ignoreUrls: RegExp, options?: Parameters<typeof csurf>[0] ): RequestHandler { const csrf = csurf(options) return (req, res, next) => { if (ignoreUrls.test(req.path) { return next() } return csrf(req, res, next) } } // app.ts // 色々省略 app.use(/^/(special|nocsrf)/, {/* csurf options */})