Backend not working after pulling a commit from history that worked

23 Views Asked by At

I have my Authentication System backend on Django and Frontend on React. I was trying to implement a new API endpoint and suddenly my authentication system is not working (Auth system made with Djoser).

I can assure you that before moving on to the new API I tested the Authentication System API's with POSTMAN and everything worked fine. I am using postgres db. I pulled a git commit from history that worked for sure, and still not working. One of my friends is a collaborator and for him is working, he force pushed and overwritten everything but for me for some reason it doesn't work anymore. When trying to Sign Up (or Login) I get this error

POST /auth/users/ HTTP/1.1" 400 29
POST /auth/users/activation/ HTTP/1.1" 400 50
POST /auth/jwt/create/ HTTP/1.1" 401 63

Here is my 2 models

from django.db import models
from django.db.models.signals import post_save
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
from django.dispatch import receiver
# Create your models here.

class UserAccountManager(BaseUserManager):
    def create_user(self, email, name, password=None):
        if not email:
            raise ValueError('Users must have an email address')
        email = self.normalize_email(email)
        user = self.model(email=email, name=name)

        user.set_password(password)
        user.save()

        return user

class UserAccount(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=255, unique=True)
    name = models.CharField(max_length=255)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
   
    objects = UserAccountManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name']

    def get_full_name(self):
        return self.name

    def get_short_name(self):
        return self.name
    
    def __str__(self):
        return self.email
    
########################################
class UserProfile(models.Model):
    user = models.OneToOneField(UserAccount, on_delete=models.CASCADE)
    height = models.PositiveIntegerField(default=0)  # in cm
    weight = models.PositiveIntegerField(default=0)  # in kg
    GENDER_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )
    gender = models.CharField(default=0, max_length=1, choices=GENDER_CHOICES)
    age = models.PositiveIntegerField(default=0)
    GOAL_CHOICES = (
        ('M', 'Maintain weight'),
        ('L', 'Lose weight'),
        ('G', 'Gain weight'),
    )
    goal = models.CharField(default=0, max_length=1, choices=GOAL_CHOICES)


@receiver(post_save, sender=UserAccount)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)

post_save.connect(create_user_profile, sender=UserAccount)

Serializers

from djoser.serializers import UserCreateSerializer
from django.contrib.auth import get_user_model
from rest_framework import serializers
from .models import UserProfile
User = get_user_model()

class UserCreateSerializer(UserCreateSerializer):
    class Meta(UserCreateSerializer.Meta):
        model = User
        fields = ('id', 'email', 'name', 'password')

class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        fields = ['user', 'height', 'weight', 'gender', 'age', 'goal']

And views

from django.shortcuts import render
from rest_framework import generics
from .models import UserProfile
from .serializers import UserProfileSerializer
from .permissions import IsUserOrReadOnly
from rest_framework.exceptions import PermissionDenied

class UserProfileView(generics.RetrieveUpdateAPIView):
    serializer_class = UserProfileSerializer
    lookup_field = 'user'
    permission_classes = [IsUserOrReadOnly]

    def get_object(self):
        if self.request.user.is_authenticated:
            return UserProfile.objects.get(user=self.request.user)
        raise PermissionDenied({"message": "You must be logged in."})
0

There are 0 best solutions below