- RegisterSerializer에 비밀번호 정책 검증 추가 - ExtendPasswordExpiryView: 비밀번호 유효기간 연장 API - CustomTokenObtainPairSerializer: 로그인 시 만료/잠금 검증 - password_utils.py: 정책 검증, 계정 잠금, 만료 체크 유틸리티 - SiteSettings 모델에 비밀번호 정책 필드 추가 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -0,0 +1,104 @@
|
||||
# Generated by Django 4.2.14 on 2026-01-18 15:44
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0014_sitesettings'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='customuser',
|
||||
name='locked_until',
|
||||
field=models.DateTimeField(blank=True, null=True, verbose_name='계정 잠금 해제 시간'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='customuser',
|
||||
name='login_failures',
|
||||
field=models.IntegerField(default=0, verbose_name='로그인 실패 횟수'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='customuser',
|
||||
name='password_changed_at',
|
||||
field=models.DateTimeField(blank=True, null=True, verbose_name='비밀번호 변경일시'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sitesettings',
|
||||
name='login_lockout_minutes',
|
||||
field=models.IntegerField(default=30, verbose_name='계정 잠금 시간(분)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sitesettings',
|
||||
name='login_max_failures',
|
||||
field=models.IntegerField(default=5, verbose_name='최대 로그인 실패 횟수 (0=무제한)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sitesettings',
|
||||
name='password_expiry_days',
|
||||
field=models.IntegerField(default=90, verbose_name='비밀번호 만료일 (0=무제한)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sitesettings',
|
||||
name='password_expiry_warning_days',
|
||||
field=models.IntegerField(default=14, verbose_name='만료 경고일 (만료 전 N일)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sitesettings',
|
||||
name='password_history_count',
|
||||
field=models.IntegerField(default=3, verbose_name='이전 비밀번호 재사용 금지 횟수 (0=제한없음)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sitesettings',
|
||||
name='password_max_length',
|
||||
field=models.IntegerField(default=128, verbose_name='최대 비밀번호 길이'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sitesettings',
|
||||
name='password_min_length',
|
||||
field=models.IntegerField(default=8, verbose_name='최소 비밀번호 길이'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sitesettings',
|
||||
name='password_require_digit',
|
||||
field=models.BooleanField(default=True, verbose_name='숫자 필수'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sitesettings',
|
||||
name='password_require_lowercase',
|
||||
field=models.BooleanField(default=True, verbose_name='소문자 필수'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sitesettings',
|
||||
name='password_require_special',
|
||||
field=models.BooleanField(default=True, verbose_name='특수문자 필수'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sitesettings',
|
||||
name='password_require_uppercase',
|
||||
field=models.BooleanField(default=True, verbose_name='대문자 필수'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sitesettings',
|
||||
name='password_special_chars',
|
||||
field=models.CharField(default='!@#$%^&*()_+-=[]{}|;:,.<>?', max_length=100, verbose_name='허용 특수문자'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PasswordHistory',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('password_hash', models.CharField(max_length=255, verbose_name='비밀번호 해시')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='password_history', to=settings.AUTH_USER_MODEL, verbose_name='사용자')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '비밀번호 이력',
|
||||
'verbose_name_plural': '비밀번호 이력',
|
||||
'ordering': ['-created_at'],
|
||||
},
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user