【发布时间】:2022-01-20 03:54:28
【问题描述】:
我已经扩展了 TokenObtainPairSerializer,我的用户模型将电子邮件作为 USERNAME_FIELD,但这种类型的用户没有电子邮件,而是我想使用自动生成的唯一 ID 来代替电子邮件进行身份验证。
class MyTokenStudentSerializer(TokenObtainPairSerializer):
def validate(self, attrs):
user = authenticate()(
student_id=attrs['student_id'], password=attrs['password'])
if user is not None:
if user.is_active:
data = super().validate(attrs)
refresh = self.get_token(self.user)
refresh['student_id'] = self.user.student_id
try:
data["refresh"] = str(refresh)
data["access"] = str(refresh.access_token)
data['student_id'] = self.user.student_id
data['firstname'] = self.user.firstname
data['middlename'] = self.user.middlename
data['lastname'] = self.user.lastname
data['phone'] = self.user.phone
data['last_login'] = self.user.last_login
data['joined_date'] = self.user.joined_date
except Exception as e:
raise serializers.ValidationError(
{'error': 'Something Wrong!'})
return data
else:
raise serializers.ValidationError(
{'error': 'Account is not activated'})
else:
raise serializers.ValidationError({
'error': 'Incorrect student id and password combination!'})
即使我没有通过电子邮件字段,这需要电子邮件和密码,我如何让它接受 student_id 而不是电子邮件。
【问题讨论】:
标签: django django-rest-framework django-rest-framework-simplejwt