Я не знаю, почему мой метод аутентификации не работает - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть проект django, в котором есть пользовательская модель, и я могу использовать его для правильного входа в систему.Но в моей регистрационной форме у меня есть тот же код для входа пользователя после того, как он зарегистрировался, но на самом деле он не входит в систему, просто создайте учетную запись.

Пожалуйста, попробуйте помочь мне увидеть, чтоЯ делаю не такИ если есть какой-то способ, которым я могу улучшить свой код, пожалуйста, дайте мне знать.

Следует код для формы регистрации, которая регистрирует пользователя, но не входит в систему. Если кому-то нужен какой-то дополнительный фрагмент кода, пожалуйста,спросите меня.Спасибо, вперед!

class UserFormView(View):
    form_class = UserForm
    template_name = 'scheduling/registration_form.html'
    user = get_user_model()


    #display blank form
    def get(self, request):
        form = self.form_class(None)
        return render(request, self.template_name, {'form': form})

    # process form data
    def post(self,request):
        form = self.form_class(request.POST)

        if form.is_valid():

            user = form.save(commit=False)

            #cleaned (normalized) data

            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user.set_password(password)
            user.save()

            #returns User objects if credentials are correct
            user = authenticate(username=username, password=password)

            if user is not None:
                if user.is_active:
                    login(request, user)
                    return render(request, 'scheduling/index.html', {})
                    #return redirect('scheduling:index')

        return render(request, self.template_name, {'form': form})

Теперь есть код для входа в систему, который точно такой же для userFormView (), но он регистрирует пользователя.

def login_user(request):
    if request.method == "POST":
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)

                return render(request, 'scheduling/index.html', {})
            else:
                return render(request, 'scheduling/login.html', {'error_message': 'Your account has been disabled'})
        else:
            return render(request, 'scheduling/login.html', {'error_message': 'Invalid login'})
    return render(request, 'scheduling/login.html')

И этомоя модель Costom моего пользователя:

# user class
class User(AbstractBaseUser):
    email = models.EmailField(
        max_length=255,
        unique=True,
        verbose_name='email address',
    )
    username = models.CharField(
        max_length=25,
        unique=True,
        verbose_name='username'
    )
    active = models.BooleanField(default=True)  # can login
    staff = models.BooleanField(default=False)
    admin = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    objects = UserManager()

    REQUIRED_FIELDS = []

    def __str__(self):
        return self.email

    def get_full_name(self):
        return self.email

    def get_short_name(self):
        return self.email

    def has_module_perms(self, app_label):
        # "Does the user have permissions to view the app `app_label`?"
        # Simplest possible answer: Yes, always
        return True

    def has_perm(self, perm, obj=None):
        # "Does the user have a specific permission?"
        # Simplest possible answer: Yes, always
        return True

    @property
    def is_staff(self):
        return self.staff

    @property
    def is_admin(self):
        return self.admin

    @property
    def is_active(self):
        return self.active
...