1+ from rest_framework_simplejwt .serializers import TokenObtainPairSerializer
2+ from rest_framework import serializers
3+ from django .contrib .auth .models import User
4+ from rest_framework .validators import UniqueValidator
5+ from django .contrib .auth .password_validation import validate_password
6+
7+
8+ class MyTokenObtainPairSerializer (TokenObtainPairSerializer ):
9+
10+ @classmethod
11+ def get_token (cls , user ):
12+ token = super (MyTokenObtainPairSerializer , cls ).get_token (user )
13+
14+ # Add custom claims
15+ token ['username' ] = user .username
16+ return token
17+
18+
19+ class RegisterSerializer (serializers .ModelSerializer ):
20+ email = serializers .EmailField (
21+ required = True ,
22+ validators = [UniqueValidator (queryset = User .objects .all ())]
23+ )
24+
25+ password = serializers .CharField (write_only = True , required = True , validators = [validate_password ])
26+ password2 = serializers .CharField (write_only = True , required = True )
27+
28+ class Meta :
29+ model = User
30+ fields = ('username' , 'password' , 'password2' , 'email' , 'first_name' , 'last_name' )
31+ extra_kwargs = {
32+ 'first_name' : {'required' : True },
33+ 'last_name' : {'required' : True }
34+ }
35+
36+ def validate (self , attrs ):
37+ if attrs ['password' ] != attrs ['password2' ]:
38+ raise serializers .ValidationError ({"password" : "Password fields didn't match." })
39+
40+ return attrs
41+
42+ def create (self , validated_data ):
43+ user = User .objects .create (
44+ username = validated_data ['username' ],
45+ email = validated_data ['email' ],
46+ first_name = validated_data ['first_name' ],
47+ last_name = validated_data ['last_name' ]
48+ )
49+
50+ user .set_password (validated_data ['password' ])
51+ user .save ()
52+
53+ return user
0 commit comments