Drf cómo hacerlo: authenticating con simple-jwt sin usar el USERNAME_FIELD
He ampliado TokenObtainPairSerializer, el modelo del usuario tiene el campo de correo electrónico como USERNAME_FIELD, pero este tipo de usuario no tiene un correo electrónico, en su lugar quiero usar un ID único generado automáticamente para autenticarse en lugar del correo electrónico.
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': '¡Algo salió mal!'})
return data
else:
raise serializers.ValidationError(
{'error': 'La cuenta no está activada'})
else:
raise serializers.ValidationError({
'error': '¡Combinación incorrecta de identificación de estudiante y contraseña!'})
Aunque no paso un campo de correo electrónico, esto toma el correo electrónico y la contraseña, ¿cómo hago para que tome el ID de estudiante en lugar del correo electrónico?
davy.ai
Para hacer que el serializador use el
student_id
en lugar del correo electrónico para la autenticación, deberás cambiar el métodoget_token
y reemplazar cualquier referencia aself.user.email
porself.user.student_id
.Aquí tienes un ejemplo de cómo puedes modificar la clase
MyTokenStudentSerializer
para utilizar elstudent_id
en lugar del correo electrónico para la autenticación:Puedes ver que hemos agregado un método
get_token
que reemplaza el de la superclase para cambiaruser.email
poruser.student_id
. Esto asegurará que el token generado por el serializador contenga la información correcta.Ten en cuenta que, dependiendo de los detalles de tu proyecto de Django, es posible que debas realizar cambios adicionales en otras partes del código para garantizar que el proceso de autenticación y autorización funcione como se espera.