2017-10-26 22 views
0

私はdjangoのデフォルトのユーザーテーブルを使いたくないので、ユーザー名とハッシュパスワードでユーザーテーブルを作成しました。私はデータベースに投稿する際にmake_password()でパスワードをハッシュしましたが、同じメソッドを使用してデータベースから情報を取得しようとしたときに、同じパスワードに対して別のハッシュが取得されます。以下は、ユーザーを保存して詳細を取得するためのビューコードです。塩のMake_Passwordは同じパスワードに対して異なるハッシュ値を返す

view.py

class HMUser(APIView): 
    def post(self, request): 
    request.data['password'] = make_password(request.data['password']) 
    print(request.data['password']) 
    serialize = serializers.HMUserSerializer(data=request.data) 
    if serialize.is_valid(): 
     serialize.save() 
     return Response(1, status=status.HTTP_201_CREATED) 
    return Response(serialize.errors, 
    status=status.HTTP_400_BAD_REQUEST) 


class Login(APIView): 
    def get(self, request, username, password): 
    print("pass ", password) 
    userpassword = make_password(password) 
    print("Hash", userpassword) 
    user_details = models.HMUser.objects.get(username=username, 
    password=userpassword) 
    serialize = serializers.HMUserSerializer(user_details) 
    return Response(serialize.data) 
+0

ありがとうMahesh、私はユーザー名とパスワードの両方を取っていますが、通常の認証プロセスでハッシュされたパスワードだけです。私は、ハッシュするとき何か間違っていると信じています。 –

+0

あなたが観察するのは、塩漬けと意図されたセキュリティ機能です。 –

+0

ありがとう、私は問題を解決するために何を提案するのですか? –

答えて

0

不一致があなたの問題であり、

塩には塩が存在しないので、それをより安全にするために、パスワードに加えて使用されるシードまたは乱数であります実行時にランダムに生成され、同じパスワードに対して毎回新しい値を生成します。

最適な方法は、パスワードを作成し、確認しながらあなたが同じになる塩の使用を確認する必要がありmake_password(salt='mySalt',password=realPassword)

のようなもの、

回避策は、あなた自身の塩を指定することですはるかに友好的であるcheck_password()を、使用することです。

+0

**固定塩を使用しないでください!**これは塩の目的を完全に破り、データベース内のすべてのパスワードのパスワードハッシュの並列計算を可能にします。 – knbk

+0

この作品...ありがとう –

関連する問題