この記事について
| 環境 | Flask + flask-wtf(CSRFProtect) |
|---|---|
| 目的 | 特定のページ(webhook受信など)だけCSRF保護を外す |
| 結果 | ルーティングに @csrf.exempt デコレーターを付けて解決 |
特定のページだけcsrf保護を除外したいときがある。たとえば、lineボットを作るとき、lineからwebhookを受け取るページにcsrf保護を有効にしていると、lineからcsrfトークンを投げてもらうことはできないので、400エラーで通信不可となるため、csrf保護を無効にしたい。
一部ページのみcsrf保護を無効にするにはをルーティングを指定している場所に以下のデコレーターを追記する。
@csrf.exempt
完全なスニペットは次のとおり。
app.py
# CSRFProtectクラスをインスタンス化
csrf = CSRFProtect()
views.py
from app import csrf
@csrf.exempt
@blueprint.route("/", methods=["GET", "POST"])
def callback():
return "blueprint page"
