hiiii i'm working on a school projet , and i basically have an issue with the login i cannot make it work no matter how many overrding im doing it always show me that my query doesnt match any existing user ({"status":401,"message":"Invalid Email or Password"})
custom user model :
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_("email address"), unique=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(auto_now_add=True)
is_company = models.BooleanField(blank=True,null=True)
USERNAME_FIELD = "email"
REQUIRED_FIELDS = []
objects = CustomUserManager()
def __str__(self):
return self.email
custom email backend:
class EmailBackend(ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
try:
user = UserModel.objects.get(Q(email__iexact=username))
except UserModel.DoesNotExist:
UserModel().set_password(password)
except MultipleObjectsReturned:
return CustomUser.objects.filter(email=username).order_by('id').first()
else:
if user.check_password(password) and self.user_can_authenticate(user):
return user
def get_user(self, user_id):
try:
user = UserModel.objects.get(pk=user_id)
except UserModel.DoesNotExist:
return None
return user if self.user_can_authenticate(user) else None
login view
class LoginAPIView(APIView):
def post(self,request):
serializer = LoginSerializer(data = request.data)
if serializer.is_valid():
email = serializer.validated_data["email"]
password = serializer.validated_data["password"]
user = authenticate(request, username=email, password=password)
if user is not None:
token = Token.objects.get(user=user)
response = {
"status": status.HTTP_200_OK,
"message": "success",
"data": {
"Token" : token.key
}
}
return Response(response, status = status.HTTP_200_OK)
else :
response = {
"status": status.HTTP_401_UNAUTHORIZED,
"message": "Invalid Email or Password",
}
return Response(response, status = status.HTTP_401_UNAUTHORIZED)
response = {
"status": status.HTTP_400_BAD_REQUEST,
"message": "bad request",
"data": serializer.errors
}
return Response(response, status = status.HTTP_400_BAD_REQUEST)
login serializer :
class LoginSerializer(serializers.ModelSerializer):
email = serializers.EmailField()
class Meta:
model = CustomUser
fields = ['email','password']
I have to make an email/password login with token auth not an username one Pleaseee help me solve this i have been on it for 48 hours
Try below code,
Here it's not UserModel it is User.
and use the below code like above. You should return None.