update
Some checks failed
Build And Test / build-and-push (push) Failing after 1m46s

This commit is contained in:
2026-01-13 22:41:07 +09:00
parent e4b185332b
commit 00db74a333
6 changed files with 152 additions and 9 deletions

View File

@ -11,6 +11,16 @@ class RegisterSerializer(serializers.ModelSerializer):
fields = ("email", "name", "password", "grade", "desc",
"phone", "address", "gender", "birth_date", "education")
def validate_email(self, value):
if CustomUser.objects.filter(email=value).exists():
raise ValidationError("이미 사용 중인 이메일입니다.")
return value
def validate_name(self, value):
if CustomUser.objects.filter(name=value).exists():
raise ValidationError("이미 사용 중인 이름입니다.")
return value
def create(self, validated_data):
password = validated_data.pop("password")
user = CustomUser(**validated_data)
@ -19,7 +29,24 @@ class RegisterSerializer(serializers.ModelSerializer):
return user
class UserListSerializer(serializers.ModelSerializer):
"""관리자용 사용자 목록 시리얼라이저"""
class Meta:
model = CustomUser
fields = [
'id', 'email', 'name', 'grade', 'is_active', 'is_staff',
'created_at', 'phone', 'address', 'gender', 'birth_date', 'education'
]
read_only_fields = [
'id', 'email', 'name', 'grade', 'is_staff',
'created_at', 'phone', 'address', 'gender', 'birth_date', 'education'
]
class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
# email 필드를 identifier로 재정의 (이메일 또는 이름 허용)
email = serializers.CharField()
@classmethod
def get_token(cls, user):
token = super().get_token(user)
@ -36,18 +63,23 @@ class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
return token
def validate(self, attrs):
email = attrs.get("email")
identifier = attrs.get("email") # 이메일 또는 이름
password = attrs.get("password")
user = CustomUser.objects.filter(email=email).first()
# 이메일 또는 이름으로 사용자 찾기
user = CustomUser.objects.filter(email=identifier).first()
if user is None:
user = CustomUser.objects.filter(name=identifier).first()
if user is None:
raise ValidationError("이메일 또는 비밀번호가 올바르지 않습니다.")
raise ValidationError("계정 또는 비밀번호가 올바르지 않습니다.")
if not user.is_active:
raise ValidationError("계정이 비활성화되어 있습니다. 관리자에게 문의하세요.")
if not user.check_password(password):
raise ValidationError("이메일 또는 비밀번호가 올바르지 않습니다.")
raise ValidationError("계정 또는 비밀번호가 올바르지 않습니다.")
# 부모 클래스의 validate를 위해 attrs에 실제 email 설정
attrs["email"] = user.email
self.user = user # ✅ 수동 설정 필요
data = super().validate(attrs)