どのように、ジャンゴはパスワードを評価しますか?


このブログは最初に投稿されましたmy blog .
数日前、私は古いJJANGOプロジェクトの1つに取り組んでいました.それは、Djangoの古いバージョンを実行していました、そして、私はフレームワークの最新の変化でそれを更新し続けたいです.
それで、チェックするadmin site , ローカルデータベースへの接続後にスーパーユーザを作成しようとしました.
python manage.py createsuperuser
ユーザ名に似たパスワードを渡すと失敗しました.The password is too similar to the username.
このエラーは、このパスワード検証機能の背後にある作業をチェックしました.
私が最初に見たのはmanage.py 順番に呼び出されたメソッドをimportして実行したファイル自身.execute_from_command_line .
私はそれを追跡し、パッケージを見つけたcommands 私が知りたかったすべてを含むこと.このディレクトリには2つのファイルがありました.
1. createsuperuser.py
2. changepassword.py

ChangePasswordコマンド


私はそのことを聞いたことがないのでchangepassword コマンド、私は最初にそれをしようとし、私の偉大な喜びに、それが働いたと思った.ユーザ名を最初の引数として渡す必要があります.
python manage.py changepassword username

時には、コードを読むときに金を見つける右?😍
さあ、ビジネスに戻りましょうcreatesuperuser コマンドクラス.

正しいデータベースの取得


あなたがしばらくの間Jjangoを使用しているならば、あなたはあなたが定義するセッティングに従い多くのものを変えることができるということを、あなたが知っています.
また、あなたのベースユーザーモデルとしていくつかのランダムモデルを使用しています.これはスーパーユーザーの作成が最初のことです__init__ コンストラクタメソッドをチェックします.

相互作用のないスーパーユーザの作成


任意の相互作用なしでスーパーユーザを作成できるコマンドのバージョンを使用できます.
python manage.py createsuperuser --username ranvir --email abc@abc.com --no-input

このプロセスを使用して作成されたユーザーはパスワードを持ちません.パスワードを作成するにはchangepassword コマンドまたは管理パネル.

必須フィールドとインタラクティブモード


デフォルトではUser モデルemail 唯一の必須のフィールドですが、変更することによって変更することができますREQUIRED_FIELD 同様に設定します.
対話モード(デフォルトモードでもある)では、プロンプトがあなたに記入するように要求した最初のことは、ユーザー名です.
djangoは、現在のシステムユーザ名をデフォルトのユーザ名として賢く提案しようとします.(ちょうどワウ)

それがすでに取られるならば、それはシステムユーザ名を提案しません.私にとっては😂)

ユーザー名の後、デフォルトのユーザーモデルの電子メールフィールドである必須フィールドを入力する必要があります.
最後に、パスワードフィールドを入力する必要があります.

validate passwordメソッド


閉じるこの動画はお気に入りから削除されています.
The validatepassword ユーザーが提供するパスワードを検証するために使用する関数です.
もう一度、これらのバリデータを構成することもできます.これらの異なるパスワード検証が動作しない場合は、設定ファイルからクラスを削除して削除します.
これらは既定のバリデータです.
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',
    },
]
デフォルトのバリデータを使用する場合は、パスワードを入力します.
  • username , first_name , last_name and email . また、類似性をチェックするSequenceMatcher . それはあなたがカスタマイズすることができる0.7と似ている必要があります.(それはAIだと言われました)
  • は8文字以上でなければなりません.
  • 一般的なパスワードのリストにはありません.一般的なパスワードのリストはファイルにあります.common-passwords.txt.gz . それはあなたが使用しないでください約20000の一般的なパスワードのリストが含まれています.
  • すべての数値文字を含んではなりません.
  • 私は、パスワード処理のために基本的な構成をそのまま維持することを提案します.あなたは同様にそれの上に独自の検証を使用することができます.
    だから、今回はそれです.次まで.