0

ユーザーを認証しようとしていますがauthenticate()、django (1.4) を使用すると返されますNone...手動でデータベースにクエリを実行しようとしました:

select * from auth_user where password = THE_PASSWORD

そして、期待されるユーザーを取り戻します。ブレークポイントを使用してデバッグしようとしたところ、check_password()関数 inがindjango.contrib.auth.hashersに戻っていることがわかりました...しかし、正直なところ、問題をさらに掘り下げる理由と方法がわかりません...何か考えはありますか?Falsehasher.verify()

ps。オリジナルを修正していないSECRET_KEY

アップデート:

OMG...やっと問題がわかりました!私のアプリケーションの実際には、ユーザーサインアップ用のフォームがあります。ユーザーがそのフォームを送信すると、ユーザーを「アクティブ」に設定するアクティベーションリンクが記載された電子メールが届きます...「自動ログインを実装したいと思います。 「ユーザーがリンクを介してアクティブ化されたら、これを行うために、ハッシュ化されたパスワード (プログラムで取得できる唯一のもの) を使用して彼を認証しようとしましたが、django authenticate() は生のパスワードを期待しています。ユーザーがログインフォームに手動で書き込むものであり、セキュリティ上の理由から、データベースに保存されているハッシュ化されたものから再生成することはできません...だから、私は基本的に悪い習慣に従っていました...正しい動きは、代わりにユーザーに次のような新しいページを提示することです。

4

1 に答える 1

0

生のパスワードを使用してデータベースに手動でクエリを実行し、ユーザーを正常に返す場合は、ハッシュされたパスワードではなく、生のパスワードをデータベースに保存したことを意味します。当然、ハッシュ化されたパスワードを db で見つけようとする Django の試みは失敗します。

ここでは、あなたではなく Django が正しいことを行っていることに注意してください。生のパスワードではなく、ハッシュ化されたパスワードを保存する必要があります。

于 2013-02-09T19:30:29.290 に答える