ObtainAuthToken: "non_field_errors": [ "Unable to log in with provided credentials."

943 views
Skip to first unread message

Abdullah Nafees

unread,
Aug 31, 2022, 2:48:33 AM8/31/22
to Django REST framework
Hey guys,

ObtainAuthToken is not returning Token for provided username and password. My requirement is to create a custom user so I am not using the default one. I have already tried the solution provided here. I am pasting my code below:

managers.py
from django.contrib.auth.models import BaseUserManager


class CustomUserManager(BaseUserManager):
def create_user(self, validated_data):
if not validated_data["email"]:
raise ValueError("User must have a unique username.")

user = self.model(
email=self.normalize_email(validated_data["email"]),
username=validated_data["username"],
)

user.set_password(validated_data["password"])
user.save(using=self._db)
return user

serializers.py
from rest_framework import serializers

from .models import CustomUser

class CustomUserSerializer(serializers.ModelSerializer):
class Meta:
model = CustomUser
fields = "__all__"

class UserLoginSerializer(serializers.ModelSerializer):
class Meta:
model = CustomUser
fields = ["username", "email", "password"]
extra_kwargs = {"password": {"write_only": True}}

views.py
from rest_framework.authtoken.models import Token
from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.generics import CreateAPIView, ListAPIView
from rest_framework.response import Response

from .models import CustomUser
from .serializers import CustomUserSerializer, UserLoginSerializer


class ListUsers(ListAPIView):
queryset = CustomUser.objects.all()
serializer_class = CustomUserSerializer


class RegisterUser(CreateAPIView):
queryset = CustomUser.objects.all()
serializer_class = CustomUserSerializer


class LoginView(ObtainAuthToken):
def post(self, request, *args, **kwargs):
serializer = UserLoginSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data["username"]
token, created = Token.objects.get_or_create(user=user)
return Response({"token": token.key, "user_id": user.pk, "email": user.email})

Response
{
"non_field_errors": [
"Unable to log in with provided credentials."
]
}
Reply all
Reply to author
Forward
0 new messages