如何在AbstractUser模型django中使用authenticate方法

pieyvz9o  于 2023-06-07  发布在  Go
关注(0)|答案(1)|浏览(143)

我在Django上写网站,我需要做一个工作peepers的注册和授权系统,为此我使用Django AbstractUser模型,注册工作良好,但授权不起作用,并且authenticate方法返回None
下面是我的JobseekerRegsiterInfo模型:

class JobseekerRegisterInfo(AbstractUser):
    username = first_name = last_name = None
    id = models.BigAutoField(primary_key=True)
    phone_number = PhoneNumberField()
    email = models.EmailField(unique=True)
    full_name = models.CharField(max_length=120)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['phone_number', 'full_name', 'hashed_password']

    def __str__(self):
        return self.full_name

登录表单:

class JobseekerLoginForm(forms.Form):
    email = forms.EmailField(label='Введіть ваш Email: ',
                             widget=forms.EmailInput(attrs={'class': 'form-control'}))
    password = forms.CharField(label='Ваш пароль: ',
                               widget=forms.PasswordInput(attrs={'class': 'form-control'}))

    def clean_email(self):
        email = self.cleaned_data['email']
        # if not select_field_value_from_model(JobseekerRegisterInfo, 'email', email):
        if not JobseekerRegisterInfo.objects.filter(email=email):
            raise forms.ValidationError('Неправильно введені email або пароль')
        return email

查看功能:

def jobseeker_login_view(request):
    title = 'Авторизація'
    context = {'title': title}
    if request.method == 'POST':
        form = JobseekerLoginForm(request.POST)
        context['form'] = form
        if form.is_valid():
            email = form.cleaned_data['email']
            password = form.cleaned_data['password']
            user = authenticate(request, email=email, password=password)
            print(generate_password_hash(password))
            if user:
                print(user)
            else:
                print('USER IS NONE')
        else:
            form_errors = form.errors.as_data()
            custom_error = custom_error_service(form_errors)
            context['list_first_error'] = custom_error
    else:
        form = JobseekerLoginForm()
        context['form'] = form
    return render(request, template_name='jobseeker/jobseeker_login.html', context=context)

但无论我做什么,控制台中都只显示USER IS NONE
请告诉我,在我的情况下如何正确使用authenticate

kninwzqo

kninwzqo1#

AbstractUserAbstractBaseUser的基本区别

AbstractUser

AbstractUser类继承User类,用于在数据库本身中添加用户所需的其他字段。所以它改变了数据库的模式。它主要用于添加诸如date_of_birth、location和bio等字段。到现有的用户模型这是做的最开始的项目。这意味着您将获得完整的字段,默认情况下,该字段与用户Model以及您添加/定义的以下字段一起提供。

AbstractBaseUser

AbstractBaseUser只具有身份验证功能,它没有实际的字段,您将在子类化时提供要使用的字段。
你必须知道哪些字段代表用户名字段,以及如何管理这些用户
例如,你必须在身份验证中使用电子邮件,通常Django在身份验证中使用用户名,那么你如何将其更改为使用电子邮件?

注意-所以,你需要继承AbstractBaseUser而不是AbstractUser来使用Django内置的身份验证功能。

相关问题