Djangoによるフォーム入力後の送信にてCSRF検証に失敗したため、リクエストは中断されました。
という403エラーが出る問題を修正。
原因
Djangoのメジャーアップデートのため起こっているようだ。2から4にすればその辺も変更は加えられて当然だろう。
どういう変更がされたかと確認すると、CSRF対策のチェックの時に、httpリクエストのOrigin
ヘッダーの値がDjangoでのCSRF_TRUSTED_ORIGINS
のリストに含まれているかどうかチェックするようになったようだ。
下記のDjangoドキュメントのHow it worksの第4項付近に書いてある:
クロスサイトリクエストフォージェリ (CSRF) 対策 | Django ドキュメント
The web framework for perfectionists with deadlines.
Origin
ヘッダについてはこちらのMDNを参照:
Origin - HTTP | MDN
The HTTP Origin request header indicates the origin (scheme, hostname, and port) that caused the request. For example, i...
対処
Djangoアプリ側に設定を加える。CSRF_TRUSTED_ORIGINS
を加える。settings.py
などに、
# settings.py, etc
CSRF_TRUSTED_ORIGINS = ["https://a.domain.name"]
https://
などスキームから指定する必要があることに注意。Origin
ヘッダを比較することを考えれば自然。
おわり
Djangoももう4か。Djangoのリリースノートについてはここ:
Django 4.0 release notes | Django documentation
The web framework for perfectionists with deadlines.
以上です。