delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

DjangoでUserモデルのインスタンスにpasswordをsetするときにはset_passwordメソッドを使う

少しハマったのでメモ

事象

Djangoの勉強用のプロジェクトで以下のようなコードを書いていた。
ユーザー登録完了後にsqliteのauth_userテーブルの中身をみたところ、パスワードが平文で保存されていることに気がついた。(ハッシュ化されていなかった。)

from django.contrib.auth.models import User
 ...
user = User(
            username=form.cleaned_data["username"],
            password=form.cleaned_data["password"],
        )
user.save()
...

原因・対応方法

Userモデルのインスタンスにpasswordをsetするときにはset_passwordメソッドを使わなければならない。

from django.contrib.auth.models import User
...
user = User(username=form.cleaned_data["username"])
user.set_password(form.cleaned_data["password"])
user.save()
...

githubDjango本体のソースを確認したところ、set_passwordメソッドの中でmake_passwordというメソッドを呼んでいたので、恐らくこの中でハッシュ化しているのだろう。
github.com