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