Django4のCSRF検証に失敗したというエラーを修正する

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.

以上です。

タイトルとURLをコピーしました