From ec6e2ed4da775f8aaaa88f5b624772a9d2bdc180 Mon Sep 17 00:00:00 2001 From: icurfer Date: Tue, 20 May 2025 08:16:14 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B3=84=EC=A0=95=20=EA=B0=80=EC=9E=85=20?= =?UTF-8?q?=EB=B9=84=ED=99=9C=EC=84=B1=20=EB=AA=A8=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0003_alter_customuser_is_active.py | 18 +++++++++++ users/models.py | 3 +- users/serializers.py | 31 ++++++++++++++----- version | 2 +- 4 files changed, 45 insertions(+), 9 deletions(-) create mode 100644 users/migrations/0003_alter_customuser_is_active.py diff --git a/users/migrations/0003_alter_customuser_is_active.py b/users/migrations/0003_alter_customuser_is_active.py new file mode 100644 index 0000000..aaac72e --- /dev/null +++ b/users/migrations/0003_alter_customuser_is_active.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.14 on 2025-05-19 22:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0002_customuser_desc'), + ] + + operations = [ + migrations.AlterField( + model_name='customuser', + name='is_active', + field=models.BooleanField(default=False), + ), + ] diff --git a/users/models.py b/users/models.py index ba268d0..ca5e586 100644 --- a/users/models.py +++ b/users/models.py @@ -30,6 +30,7 @@ class CustomUser(AbstractBaseUser, PermissionsMixin): ('admin', '관리자'), ('manager', '매니저'), ('user', '일반 사용자'), + ) email = models.EmailField(unique=True) @@ -37,7 +38,7 @@ class CustomUser(AbstractBaseUser, PermissionsMixin): grade = models.CharField(max_length=20, choices=GRADE_CHOICES, default='user') desc = models.TextField(blank=True, null=True, verbose_name="설명") - is_active = models.BooleanField(default=True) + is_active = models.BooleanField(default=False) # 최초 가입 비활성 is_staff = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) diff --git a/users/serializers.py b/users/serializers.py index f174945..17c363e 100644 --- a/users/serializers.py +++ b/users/serializers.py @@ -1,16 +1,17 @@ from rest_framework import serializers from .models import CustomUser from rest_framework_simplejwt.serializers import TokenObtainPairSerializer +from rest_framework.exceptions import ValidationError class RegisterSerializer(serializers.ModelSerializer): password = serializers.CharField(write_only=True) class Meta: model = CustomUser - fields = ('email', 'name', 'password', 'grade', 'desc') + fields = ("email", "name", "password", "grade", "desc") def create(self, validated_data): - password = validated_data.pop('password') + password = validated_data.pop("password") user = CustomUser(**validated_data) user.set_password(password) user.save() @@ -26,12 +27,28 @@ class CustomTokenObtainPairSerializer(TokenObtainPairSerializer): token["name"] = user.name token["grade"] = user.grade token["email"] = user.email # 선택적으로 추가 가능 - + # Kong JWT 플러그인용 issuer 정보 추가 token["iss"] = "msa-user" return token - # def validate(self, attrs): - # data = super().validate(attrs) - # data['name'] = self.user.name # ✅ 여기에 토큰 응답 추가 정보 삽입 - # return data \ No newline at end of file + + def validate(self, attrs): + email = attrs.get("email") + password = attrs.get("password") + + user = CustomUser.objects.filter(email=email).first() + + if user is None: + raise ValidationError("이메일 또는 비밀번호가 올바르지 않습니다.") + if not user.is_active: + raise ValidationError("계정이 비활성화되어 있습니다. 관리자에게 문의하세요.") + if not user.check_password(password): + raise ValidationError("이메일 또는 비밀번호가 올바르지 않습니다.") + + self.user = user # ✅ 수동 설정 필요 + data = super().validate(attrs) + + data["email"] = user.email + data["grade"] = user.grade + return data diff --git a/version b/version index 5c4511c..7d6b3eb 100644 --- a/version +++ b/version @@ -1 +1 @@ -0.0.7 \ No newline at end of file +0.0.8 \ No newline at end of file