Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

552
Vistas
Obtener "AuthToken.user" debe ser una instancia de "Usuario". en django-resto-knox

Estoy creando un método de inicio de sesión usando Django-rest-Knox. Creé un usuario personalizado en la aplicación usando AbstractBaseUser .

Esta es mi vista.py

 class LoginView(GenericAPIView): serializer_class = LoginSerializer def post(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) # Load request body to serializer serializer.is_valid(raise_exception=True) # Validate data in serializer and raise an error if one is found user = serializer.validated_data # Get the validated data from the serializer token = AuthToken.objects.create(user)[1] # Create an Authentication Token for the user return Response({ "user": UserSerializer(user, context=self.get_serializer_context()).data, # Get serialized User data "token": token })

Serializador.py

 class LoginSerializer(serializers.Serializer): username = serializers.CharField() password = serializers.CharField() # class Meta: # model = User # fields = ('username', 'password') def Validate(self, data): user = authenticate(**data) if user: return user raise serializers.ValidationError("Incorrect Credentials")

Este es mi modelo de usuario personalizado

 class User(AbstractBaseUser): _id = models.AutoField email = models.EmailField(verbose_name='email', max_length=255, unique=True) username = models.CharField(verbose_name='username', max_length = 100, unique=True) name = models.CharField(max_length = 100) date_joined = models.DateTimeField(verbose_name="date-joined", auto_now_add=True) last_login = models.DateTimeField(verbose_name="last-login", auto_now=True) category = models.CharField(max_length=50, default= "teacher") is_admin = models.BooleanField(default=False) is_staff = models.BooleanField(default=False) is_superuser = models.BooleanField(default=False) is_active = models.BooleanField(default=True) is_teacher = models.BooleanField(default=False) is_parent = models.BooleanField(default=False) USERNAME_FIELD = 'username' REQUIRED_FIELDS = ['email',] objects = UserManager() def __str__(self): # return self.email return self.username def has_perm(self, perm, obj=None): return self.is_admin def has_module_perms(self, app_label): return True

Recibo un error de valor al enviar el inicio de sesión como Cannot assign "OrderedDict([('username', 'api_test'), ('password', 'test@123')])": "AuthToken.user" must be a "User" instance.

Creo que en algún lugar Django/Knox no puede obtener user y user.is_active en mi LoginSerializer . He iniciado mi modelo de usuario desde las migraciones iniciales.

Cualquier ayuda para resolver este problema sería genial. Gracias.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En esta parte de tu código:

 return Response({ "user": UserSerializer(user, context=self.get_serializer_context()).data, # Get serialized User data "token": token })

Debe reemplazar el token por una instancia del usuario al que pertenece este token, por ejemplo:

 return Response({ "user": UserSerializer(user, context=self.get_serializer_context()).data, # Get serialized User data "token": User.objects.get(token=token) })
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda