この記事について
| 環境 | Flask + line-bot-sdk-python(さくらのVPS) |
|---|---|
| 目的 | LINEボットのwebhookエンドポイントが400を返す原因を特定する |
| 結果 | flask-wtfのCSRF保護が原因。webhookページだけCSRF保護を無効にして解決 |
つまずきポイント要約
- LINE側はCSRFトークンを送れないので、CSRF保護が有効なwebhookエンドポイントは必ず400になる
- 原因はpythonのエラーログ(The CSRF token is missing.)で分かる
事象
サンプルコードをもとにflaskでLINEボットを作成したが、apiのエンドポイントにリクエストを投げると400エラーが返る。
サンプルコード掲載ページ
GitHub - line/line-bot-sdk-python: LINE Messaging API SDK for Python
LINE Messaging API SDK for Python. Contribute to line/line-bot-sdk-python development by creating an account on GitHub.
原因
pythonのエラーログを確認
INFO:flask_wtf.csrf:The CSRF token is missing.
対処
LINE側からはcsrf対策に必要なトークンを投げられないので、csrf対策を無効にすることで解決
一部のページだけcsrf保護を無効にする具体的なやり方はこちら → flaskで特定のページだけcsrf保護を除外
