首页 文章

Django 1.7 'AnonymousUser'对象没有属性'backend'

提问于
浏览
0

我是Django的新手 . 我试图在注册用户后创建自动登录 . 但我失败了 . 我为用户名和密码asuthentification创建了一个自定义身份验证后端 .

class EmailBackend(object):
def authenticate(self, username=None, password=None):
    user_cls = get_user_model()
    try:
        user = user_cls.objects.get(email=username)
        if user.check_password(password):
            return user
    except user_cls.DoesNotExist:
        return None


def get_user(self, user_id):
    user_cls = get_user_model()
    try:
        return user_cls.objects.get(pk=user_id)
    except user_cls.DoesNotExist:
        return None

AUTHENTICATION_BACKENDS = (
    'user.back_auth.EmailBackend',
    'django.contrib.auth.backends.ModelBackend',
)

我尝试在注册后为用户制作自动登录:

def register(request):
if request.method == 'POST':
    user_form = UserForm(request.POST)
    if user_form.is_valid():
        user = user_form.save()
        messages.info(request, "Thanks for registering. You are now logged in.")
        user = authenticate(username=request.POST['username'],
                            password=request.POST['password'])
        login(request, user)
        return HttpResponseRedirect("/")
else:
    user_form = UserForm()
    return render(request,
            'user/register.html',
            {'user_form': user_form } )

但是,我正在接下来:

/ user / register /中的AttributeError'AnonymousUser'对象没有属性'后端'

2 回答

  • 1

    您的用户创建方法错误,因为我假设您以纯文本格式保存用户 .

    两种方式......

    方法使用 set_password

    方法使用 create_user

  • 0

    我的工作版本:

    def register(request):
    if request.method == 'POST':
        user_form = UserForm(request.POST)
        if user_form.is_valid():
            user = user_form.save()
            user.set_password(request.POST['password'])
            user.save()
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate(username=username,password=password)
            user.backend = 'django.contrib.auth.backends.ModelBackend'
            login(request, user)
        messages.info(request, "Thanks for register!")
        return HttpResponseRedirect("/")
    

相关问题