Django는 비밀번호를 어떻게 확인합니까?

이 블로그는 my blog에 처음 게시되었습니다.

며칠 전, 저는 오래된 Django 프로젝트 중 하나를 작업하고 있었습니다. 이전 버전의 Django를 실행 중이었고 프레임워크의 최신 변경 사항으로 계속 업데이트하고 싶었습니다.

그래서 admin site을 확인하기 위해 로컬 데이터베이스에 접속한 후 슈퍼유저를 생성해 보았습니다.

python manage.py createsuperuser


사용자 이름과 유사한 암호를 전달했을 때 다음과 같은 메시지가 표시되지 않았습니다The password is too similar to the username..



이 오류로 인해 이 암호 유효성 검사 기능의 작동 방식을 확인하게 되었습니다.

내가 조사한 첫 번째 항목은 manage.py 파일 자체였으며, 이 파일은 execute_from_command_line라는 메서드를 가져오고 실행했습니다.

다시 추적하여 내가 알고 싶은 모든 것을 포함하는 패키지commands를 찾았습니다. 이 디렉토리에는 두 개의 파일이 있습니다.

1. createsuperuser.py
2. changepassword.py


비밀번호 변경 명령


changepassword 명령에 대해 들어본 적이 없었기 때문에 먼저 시도해 보려고 생각했고 매우 기쁘게 생각했습니다. 사용자 이름을 첫 번째 인수로 전달해야 합니다.

python manage.py changepassword username




때때로 코드를 읽을 때 금을 발견합니다. 😍

이제 본론으로 돌아가 createsuperuser 명령 클래스를 자세히 살펴보겠습니다.

올바른 데이터베이스 가져오기



한동안 Django를 사용해 왔다면 Django에서 정의한 설정에 따라 많은 것을 변경할 수 있다는 것을 알 것입니다.

여기에는 임의의 모델을 기본 사용자 모델로 사용하는 것도 포함됩니다. 이것은 수퍼유저 생성__init__ 생성자 메서드가 확인하는 첫 번째 항목입니다.

상호 작용 없이 수퍼유저 만들기



상호 작용 없이 수퍼유저를 만들 수 있는 명령 버전을 사용할 수 있습니다.

python manage.py createsuperuser --username ranvir --email abc@abc.com --no-input




이 프로세스를 사용하여 생성된 사용자는 암호가 없습니다. changepassword 명령 또는 관리자 패널을 사용하여 비밀번호를 생성할 수 있습니다.

필수 필드 및 대화형 모드



기본User 모델의 경우 email가 유일한 필수 필드이지만 REQUIRED_FIELD 설정을 변경하여 변경할 수도 있습니다.

대화형 모드(기본 모드이기도 함)에서 프롬프트에서 입력을 요청하는 첫 번째 항목은 사용자 이름입니다.

Django는 현재 시스템 사용자 이름을 기본 사용자 이름으로 현명하게 제안하려고 합니다. (그냥 와우)



이미 사용 중인 경우 시스템 사용자 이름을 제안하지 않습니다. (나에겐 AI야 😂)



사용자 이름 다음에는 기본 사용자 모델의 이메일 필드인 필수 필드를 채워야 합니다.

마지막으로 암호 필드를 작성해야 합니다.

암호 확인 방법



게시물 뒤의 실제 이유를 확인하기 전에 이렇게 오래 기다리게 해서 죄송합니다.
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_nameemail 와 유사하지 않아야 합니다. 또한 SequenceMatcher 을 사용하여 유사성을 확인합니다. 사용자 정의할 수 있는 0.7 미만이어야 합니다. (말했잖아 AI라고)
  • 8자보다 커야 합니다.
  • 일반 암호 목록에 있으면 안 됩니다. 일반적인 암호 목록은 common-passwords.txt.gz 파일에 있습니다. 여기에는 사용하지 말아야 할 약 20000개의 일반적인 암호 목록이 포함되어 있습니다.
  • 일부 숫자만 포함하면 안 됩니다.

  • 암호 처리를 위해 기본 구성을 그대로 유지하는 것이 좋습니다. 그 위에 자신의 유효성 검사를 사용할 수도 있습니다.

    그래서 이번에는 여기까지입니다. 다음 시간까지.

    좋은 웹페이지 즐겨찾기