【发布时间】:2015-06-11 16:09:29
【问题描述】:
我是 Django 的新手。我尝试在注册用户后创建自动登录。但我失败了。 我为用户名和密码验证创建了一个自定义身份验证后端。
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”对象没有“后端”属性
【问题讨论】:
-
您在 UserForm 中是否有任何
save方法,或者您能否确保已创建用户或什么?并告诉密码的样子(明文或哈希)? -
我在用户窗体中没有其他保存方法。并且密码是明文
-
为什么你还有一个自定义的身份验证后端?它与标准的没有什么不同。
-
允许使用邮箱和用户名进行身份验证
-
@AleksanderGordienko 试过我的答案是有效的