Problem with authenticate (username = username, password = password) in django

0

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.

    
asked by Juan Esteban 21.06.2018 в 08:02
source

1 answer

1

In the end I discovered the problem, it turns out that the ViewSets the post method is actually called create, so the correct thing was:

class LoginView(mixins.CreateModelMixin, viewsets.GenericViewSet):
    serializer_class = LoginSerializer
    def create(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)
    
answered by 23.06.2018 в 00:45