Djangoはパスワードをプレーンテキストとして保存しません。最初にハッシュし、ハッシュを格納します。ユーザーがログインすると、Djangoはユーザーの入力に同じハッシュ関数を適用し、ユーザーの入力とdbに格納されているものの2つのハッシュを比較します。
しかし、柔軟性を高めるため、Djangoにはパスワードハッシュが格納されていませんが、ハッシュが生成されたアルゴリズムも格納されています。このシナリオを想像してみましょう。ハッシュ関数X
を使用してパスワードハッシュを生成しますが、その機能は何らかの理由で安全でなくなり、ハッシュ関数Y
に切り替わります。しかし、ポイントで誰でもパスワードハッシュが関数X
を使用して保存されているため、もうログインできなくなるため、問題になります。そのため、Djangoはハッシュ値そのものに加えて、hasが生成されたメソッドも格納しています。これは、PASSWORD_HASHERS
の設定が入っています。Djangoがハッシュを生成する方法をデータベースに格納しているので、値を読むとき、実際にDjangoにどのようにハッシュ関数を実行するかは分かりません。したがってPASSWORD_HASHERS
は、ハッシングPython関数(実際にはクラスですが、とにかく...)とdbに格納された値との間のマッパーのようなものです。
質問に戻る。このエラーメッセージは、Djangoがデータベースのパスワードのハッシュを格納するために使用されたハッシュ関数password
を認識していないこと、または少なくともPASSWORD_HASHERS
に含まれていないことを認識していることを意味します。
私はそれが起こる可能性がある理由のカップルを考えることができます。
あなたがsyncdb
を行うことを確認してください、それはあなたが管理者にアクセスするには、サーバーを実行しているときと同じsettings.py
ファイルを使用しています。異なる設定が使用されている場合があります。
しかし、開発者は通常settings.py
のPASSWORD_HASHERS
を変更せず、デフォルト値を使用します。その場合は、syncdb
を実行したときと、サーバを実行するときに、インストールされている同じバージョンのDjangoで同じPythonを使用していることを確認してください。たとえば、1つのvirtualenvでsyncdb
を実行し、異なるenvでserverを実行すると、Djangoのバージョンは異なる可能性があります。したがって、PASSWORD_HASHERS
の設定が異なる可能性があります。syncdb
を実行すると、サーバーを実行するときに定義されます。
あなたはhttps://docs.djangoproject.com/en/1.4/topics/auth/#how-django-stores-passwordsでDjangoはパスワードを保存する方法についての詳細を読んだり、取得するには、ページ全体を読むことができますユーザー認証を含むDjango authの仕組みをよりよく理解する。 – miki725