33
  • パイソン3
  • ジャンゴ1.5
  • PostgreSQL 5.0.3

私はDjangoを初めて使用し、AbstractUserを利用するDjangoアプリを作成していますが、Django管理でユーザーを作成し、管理でユーザーの情報を見ると、パスワードがプレーンテキストで表示されます. DB を直接確認すると、パスワードは間違いなくプレーンテキストとして保存されていることがわかります。

認証を行うビューを作成しようとしていますが、ユーザー名とパスワードが正しい場合でも機能しません。authenticate()したがって、関数はハッシュされていると推測していますNoneが、パスワードは実際にはハッシュされていないため、戻ります。

パスワードがハッシュ化されない理由はありますか?

いくつかのコードを投稿しますが、私のモデルにはパスワードフィールドで何かを行うコードが含まれていないため (Django によって生成および実行される)、どのコードも役に立たないと思います。私が行っていることや行っていないことがある場合、それがコードのどの部分にあるのかさえわからないので、設定、モデル、管理者などからすべてを投稿する必要があります.

4

3 に答える 3

39

問題は、admin.py で django.contrib.auth.admin から UserAdmin ではなく ModelAdmin を継承したことだと思います。

サンプルコード:

from django.contrib.auth.admin import UserAdmin
from .models import Employee

class EmployeeAdmin(UserAdmin):
    pass

admin.site.register(Employee, EmployeeAdmin)
于 2015-09-04T06:05:13.527 に答える
0

データベースに直接保存するためです。したがって、保存する前に、パスワードをハッシュする方法をオーバーライドする必要があります。これをフォームに追加します。

def save(self, commit=True):
    # Save the provided password in hashed format
    user = super(MyForm, self).save(commit=False)
    user.set_password(self.cleaned_data["password"])
    if commit:
        user.save()
    return user
于 2013-03-20T04:25:54.507 に答える