Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

548
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!