Django Abstract用户登录功能问题

问题描述 投票:0回答:1

我正在尝试使用 Django AbstractUser 模型来创建我自己的用户模型, 一切似乎都工作正常,但我的单一登录/注册表单似乎有问题,即注册和登录功能工作正常并注册用户,但他们没有登录。但用户没有保持登录状态,并且在用户进行身份验证所需的视图中,我收到错误消息,表明匿名用户正在访问该视图。 我的帐户模型文件如下:



class MyUserManager(BaseUserManager):
    def create_user(self, shenase, password=None, **other_fields):
        if not shenase:
            raise ValueError("shenase is required...!")
        user = self.model(shenase=shenase, **other_fields)
        user.set_password(password)
        user.save()
        return user
    def create_superuser(self, shenase, password=None, **other_fields):
        other_fields.setdefault('is_staff', True)
        other_fields.setdefault('is_superuser', True)
        other_fields.setdefault('is_active', True)

        if other_fields.get('is_staff') is not True:
            raise ValueError('Superuser muse have is_staff=True')
        if other_fields.get('is_superuser') is not True:
            raise ValueError('Superuser muse have is_superuser=True')
        return self.create_user(shenase, password, **other_fields)

    
def random_string():
    return str(random.randint(1000000, 9999999))

class MyUser(AbstractUser):
    username = None
    shenase = models.CharField(max_length=11, unique=True)
    eshterak = models.CharField(max_length=7,default=random_string, null=True, blank=True, unique=True)
    created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True)
    

    objects = MyUserManager()

    USERNAME_FIELD = 'shenase'

    REQUIRED_FIELDS = []

    backend = 'account.mybackend.ModelBackend'

我的视图文件是:

def register_view(request):
    form = forms.RegisterForm

    if request.method == "POST":
        try:
            if "shenase" in request.POST:
                shenase = request.POST.get('shenase')
                user = MyUser.objects.get(shenase=shenase)
                user.save()
                request.session['user_shenase'] = user.shenase
                return HttpResponseRedirect(reverse('account:welcome'))

        except MyUser.DoesNotExist:
            form = forms.RegisterForm(request.POST)
            if form.is_valid():
                user = form.save(commit=False)
                user.is_active = False
                user.save()
                request.session['user_shenase'] = user.shenase
                return HttpResponseRedirect(reverse('account:welcome'))
    return render(request, 'account/register.html', {'form': form})


def welcome(request):
    try:
        shenase = request.session.get('user_shenase')
        user = MyUser.objects.get(shenase = shenase)

        user.is_active = True
        user.save()
        login(request, user)

        return render(request, 'account/welcome.html', {'shenase': shenase})

    except MyUser.DoesNotExist:
        messages.error(request, "Error accorded, try again.")
        return HttpResponseRedirect(reverse('account:register_view'))

我应该提到我的用户模型没有密码。如果用户输入已经注册的用户名(在我的例子中为“shenase”),他们就会登录,如果在注册之前尚未输入用户名,然后登录并转发到欢迎页面。

如有任何帮助,我们将不胜感激。

django django-views django-users django-login
1个回答
0
投票

问题出在settings.py中的后端设置

我所要做的就是添加:

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    'account.mybackend.ShenaseBackend', #My backend Modelbackend
)
© www.soinside.com 2019 - 2024. All rights reserved.