계정 가입 비활성 모드
All checks were successful
Build And Test / build-and-push (push) Successful in 1m57s

This commit is contained in:
2025-05-20 08:16:14 +09:00
parent a1b023cd4e
commit ec6e2ed4da
4 changed files with 45 additions and 9 deletions

View 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),
),
]

View File

@ -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)

View File

@ -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()
@ -31,7 +32,23 @@ class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
token["iss"] = "msa-user"
return token
# def validate(self, attrs):
# data = super().validate(attrs)
# data['name'] = self.user.name # ✅ 여기에 토큰 응답 추가 정보 삽입
# return data
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

View File

@ -1 +1 @@
0.0.7
0.0.8