All checks were successful
Build And Test / build-and-push (push) Successful in 1m57s
55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
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")
|
|
|
|
def create(self, validated_data):
|
|
password = validated_data.pop("password")
|
|
user = CustomUser(**validated_data)
|
|
user.set_password(password)
|
|
user.save()
|
|
return user
|
|
|
|
|
|
class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
|
|
@classmethod
|
|
def get_token(cls, user):
|
|
token = super().get_token(user)
|
|
|
|
# ✅ JWT payload에 커스텀 정보 추가
|
|
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):
|
|
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
|