ゆずめも

メモ的なブログです。主に勉強した事について書いてます。

nest.jsで特定のパスだけcsrufのチェックを回避する

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 */})

参考

github.com