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() ...
githubのDjango本体のソースを確認したところ、set_passwordメソッドの中でmake_passwordというメソッドを呼んでいたので、恐らくこの中でハッシュ化しているのだろう。
github.com