Django 1.7' AnonymousUser'对象没有属性'后端'

时间:2015-04-07 06:30:52

标签: python django

我是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' object没有属性' backend'

2 个答案:

答案 0 :(得分:1)

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

两种方式......

使用set_password

的方法

使用create_user

的方法

答案 1 :(得分: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("/")