This commit is contained in:
18
users/migrations/0003_alter_customuser_is_active.py
Normal file
18
users/migrations/0003_alter_customuser_is_active.py
Normal file
@ -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),
|
||||||
|
),
|
||||||
|
]
|
@ -30,6 +30,7 @@ class CustomUser(AbstractBaseUser, PermissionsMixin):
|
|||||||
('admin', '관리자'),
|
('admin', '관리자'),
|
||||||
('manager', '매니저'),
|
('manager', '매니저'),
|
||||||
('user', '일반 사용자'),
|
('user', '일반 사용자'),
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
email = models.EmailField(unique=True)
|
email = models.EmailField(unique=True)
|
||||||
@ -37,7 +38,7 @@ class CustomUser(AbstractBaseUser, PermissionsMixin):
|
|||||||
grade = models.CharField(max_length=20, choices=GRADE_CHOICES, default='user')
|
grade = models.CharField(max_length=20, choices=GRADE_CHOICES, default='user')
|
||||||
desc = models.TextField(blank=True, null=True, verbose_name="설명")
|
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)
|
is_staff = models.BooleanField(default=False)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from .models import CustomUser
|
from .models import CustomUser
|
||||||
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
|
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
|
||||||
|
from rest_framework.exceptions import ValidationError
|
||||||
|
|
||||||
class RegisterSerializer(serializers.ModelSerializer):
|
class RegisterSerializer(serializers.ModelSerializer):
|
||||||
password = serializers.CharField(write_only=True)
|
password = serializers.CharField(write_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CustomUser
|
model = CustomUser
|
||||||
fields = ('email', 'name', 'password', 'grade', 'desc')
|
fields = ("email", "name", "password", "grade", "desc")
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
password = validated_data.pop('password')
|
password = validated_data.pop("password")
|
||||||
user = CustomUser(**validated_data)
|
user = CustomUser(**validated_data)
|
||||||
user.set_password(password)
|
user.set_password(password)
|
||||||
user.save()
|
user.save()
|
||||||
@ -26,12 +27,28 @@ class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
|
|||||||
token["name"] = user.name
|
token["name"] = user.name
|
||||||
token["grade"] = user.grade
|
token["grade"] = user.grade
|
||||||
token["email"] = user.email # 선택적으로 추가 가능
|
token["email"] = user.email # 선택적으로 추가 가능
|
||||||
|
|
||||||
# Kong JWT 플러그인용 issuer 정보 추가
|
# Kong JWT 플러그인용 issuer 정보 추가
|
||||||
token["iss"] = "msa-user"
|
token["iss"] = "msa-user"
|
||||||
|
|
||||||
return token
|
return token
|
||||||
# def validate(self, attrs):
|
|
||||||
# data = super().validate(attrs)
|
def validate(self, attrs):
|
||||||
# data['name'] = self.user.name # ✅ 여기에 토큰 응답 추가 정보 삽입
|
email = attrs.get("email")
|
||||||
# return data
|
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
|
||||||
|
Reference in New Issue
Block a user