2016-05-09 3 views
1

私はdjangoプロジェクトでカスタム認証バックエンドを使用しています。 djangoシェルを使用してユーザーを作成しました。パスワードを入力してauthenticateメソッドを使用して認証しようとすると、Noneが返されます。Djangoはカスタム認証用パスワードハッシャーを有効にします

私はパスワードハッシュと関係があると分かりました。

データベースに保存されているパスワードは、pbkdf2_sha256$24000$c0t.....です。

djangoでハッシングを使用する方法を知りたいですか?

Settings.py:

AUTHENTICATION_BACKENDS = ('login_app.backends.LoginBackend', 
         'django.contrib.auth.backends.ModelBackend') 

# Password validation 
# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators 

AUTH_PASSWORD_VALIDATORS = [ 
    { 
     'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 
    }, 
] 

カスタムバックエンド:

def authenticate(self, email=None, password=None): 
    try: 
     user = User.objects.get(email=email) 
     if password == user.password: 
      return user 
     else: 
      return None 
    except User.DoesNotExist: 
     return None 

編集:私は手動でプレーンテキストにはpostgresにパスワードを変更した場合、それが動作します。ハッシュされたパスワードで認証を使用する方法。

+0

なぜ閉じるのですか?ちょっと理由を挙げて.. –

答えて

1

djangoが提供するcheck_passwordという関数を使用できますcheck_password(raw_password) 与えられた生の文字列がユーザーの正しいパスワードであればTrueを返します。 (これは比較の際にパスワードハッシュを処理します)

関連する問題