This commit is contained in:
@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user