konbu's blog

PHP/Ruby/Python あたりが仕事で使っている言語です。プログラミング、学習や教育ネタを書いていきます。

django.contrib.auth をメールアドレスで認証するカスタマイズ

結構面倒なので、途中で投げて、username と password での認証でも良いかーとなった。 一応調査したので痕跡だけ残す。

Customizing authentication in Django | Django documentation | Django

この辺とか詳しく書いてたんだけど、結構面倒臭く、認証をメールアドレスに変更する為に標準以外の認証用 Backend class を作る必要がある。

Using the Django authentication system | Django documentation | Django

django.contrib.auth.authenticate に username と password を渡してやる事で標準の User モデルが返って来る。 どうもこの時に username が渡されていない場合は、password 以外の他のキーワード引数で指定した辞書から User.USERNAME_FIELD をキーにして User モデルを取得するようになっているっぽい。

ぽいというのは、試していないから。

この User.USERNAME_FIELDget_user_model() で取得できるモデルを使用していて、これは settings.AUTH_USER_MODEL から参照するのでカスタム認証用モデルを設定していれば使えるという事になる。

認証を Django の仕様に載せて変更するのは結構面倒な印象だった。