2017-11-03 12 views
0

django.contrib.auth.models.AbstractBaseUserとして従来の読み取り専用DBを使用しようとしています。問題は、私の従来のパスワードフィールドはSHA1で、 'sha1 $$'文字列を開始せず、ハッシュのみであるため、すべてのパスワードに余分な文字列を追加する必要があるということです。Django - 確認する前にパスワードハッシュを変更します。

models.py明らか

class Tuzytkownik(AbstractBaseUser): 
    login = models.CharField(db_column='LOGIN', max_length=50, unique=True) 
    haslo = models.CharField(db_column='HASLO', max_length=50) 
    password = 'sha1$$' + haslo 
    USERNAME_FIELD = 'login' 
    REQUIRED_FIELDS = [] 

パスワード= 'SHA1 $$' + haslo

は働いていません。どのように私はそれを痛感することができますか?

はspecyficであるために - haslo 40charts returingハッシュのような

'cf23df2207d99a74fbe169e3eba035e633b65d94' 私は必要なもの

'SHA1 $$ cf23df2207d99a74fbe169e3eba035e633b65d94'

+0

あなたはこれを参照し、saveメソッドのデフォルトをオーバーライドして、そこにパスワードフィールドを設定することができます(HTTPS [保存事前定義の上書き]://docs.djangoprojectを。 COM/EN/ – Sheshnath

+0

私のレガシーDBが読み取り専用..saveは()はいDBに保存している)、事前に定義されたモデル・メソッドをオーバーライド1.11 /トピック/ DB /モデル/#? – luzik

+0

いいえ、そのアプローチはいくつかの理由で機能しません。 (あなたがモデルフィールドが実装されているかジャンゴ調査する必要があり、また、パスワードハッシュと認証はジャンゴで起こるか。どちらが非常に複雑である)DBが読み取り専用であるので、私はあなたの最善の策は、カスタム認証バックエンドクラスを書くことだと思います。 https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#writing-an-authentication-backend –

答えて

0

あなたがAbstractBaseUser.set_password()方法(source)をオーバーライドすることによってこれを行うことができます。

from django.contrib.auth.hashers import check_password 

class Tuzytkownik(AbstractBaseUser): 

    def check_password(self, raw_password): 
     # prepend the sha prefix before passing the hashed password to the hash checker 
     return check_password(raw_password, 'sha1$$' + self.password) 
+0

は、私はすでにそれをこのようにしましたが、元の質問への答えを見つけることができませんでした - モデル内のフィールドを変更する方法(セーブ・再定義のように()) – luzik

関連する問題