I am trying to make a login for an api with django rest framework, I am guiding myself with this video: link
Here is just the code I use in the login view:
orders / urls:
from django.urls import path, include
from . import views
from rest_framework import routers
router = routers.DefaultRouter()
router.register('usuarios', views.UsuarioViewSet)
router.register('tecnicos', views.TecnicoViewSet)
router.register('pedidos', views.PedidoViewSet)
router.register('mispedidos', views.PedidoMiUsuarioSet)
router.register('registrar', views.Registrar, base_name = 'registro')
router.register('login', views.LoginView, base_name = 'login')
router.register('logout', views.LogoutView, base_name = 'logout')
urlpatterns = [
path('', include(router.urls))
]
views.py:
class LoginView(mixins.CreateModelMixin, viewsets.GenericViewSet):
serializer_class = LoginSerializer
def post(self, request):
serializer = LoginSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data["user"]
django_login(request, user)
token, created = Token.objects.get_or_create(user=user)
return Response({"token": token.key}, status=200)
serializers.py:
class LoginSerializer(serializers.Serializer):
username = serializers.CharField()
email = serializers.CharField()
password = serializers.CharField()
def validate(self, data):
username = data.get("username", "")
email = data.get("email", "")
password = data.get("password", "")
print(password)
print(email)
if username and password:
user = authenticate(username=username, password=password)
if user:
if user.is_active:
data["user"] = user
else:
msg = "Usuario desactivado"
raise exceptions.ValidationError(msg)
else:
msg = "Imposible loguear con los parametros dados"
raise exceptions.ValidationError(msg)
else:
msg = "Se necesita el username y password"
raise exceptions.ValidationError(msg)
return data
Basically in the serializer of the Login, when it reaches the line of user = authenticate (username = username, password = password) it is not valid and goes through the path of the else showing the error "Impossible to log with the given parameters"
I do not know what error I'm committing so that the "authenticate" does not work.