还有其他几个类似问题的答案,但没有一个能解决我的问题。我得到了“你配置了多个身份验证后端,因此必须提供backend
参数或者在用户上设置backend
属性'每次我尝试使用Django中的注册创建新用户。以下是我的观点:
def signupUser(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
form.save(commit=False)
username = form.cleaned_data.get('username')
raw_password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=raw_password)
form.save()
user.backend = 'django.contrib.auth.backends.ModelBackend'
login(request, user)
return redirect('home')
else:
form = SignUpForm()
return render(request, 'signup.html', {'form': form})
我已经添加user.backend = 'django.contrib.auth.backends.ModelBackend'
以期解决问题,但它没有做任何事情。
我的forms.py:
class SignUpForm(UserCreationForm):
email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')
password1=forms.CharField(help_text='Your password cant be too similar to your other personal information. Your password must contain at least 8 characters. Your password cant be a commonly used password. Your password cant be entirely numeric.', widget=forms.PasswordInput)
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
顺便说一句,在我的AUTHENTICATION_BACKENDS中有“django.contrib.auth.backends.ModelBackend'和' allauth.account.auth_backends.AuthenticationBackend',
答案 0 :(得分:1)
您的视图功能中存在一些错误。我不知道这对你有什么影响,但为了清楚起见,我想指出一些。
首先,我正在以更合适的方式重写您的观点,
form.save()
此处,该视图旨在用于创建新用户。因此,您可能需要在调用authenticate()
函数之前调用authenticate()
方法。在提交到数据库之前,您正在尝试验证尚未创建的用户。检查您的视图是否确实记录了任何用户。然后,AttributeError
函数返回None,如果凭据中存在任何不匹配,那么,检查一下。否则,当调用login()
函数时,Django会引发{{1}}。
我严重怀疑您的视图是否记录在任何用户中,因为无论登录成功与否,您都会重定向到同一页面。它非常反直觉,使调试更加困难。只需在登录成功时重定向到主页,如果不是,则重定向到登录页面。
答案 1 :(得分:0)
我意识到即使出现此错误,仍然会创建用户,所以我想它可以完成工作。但是为了摆脱这个错误,我改变了我的看法:
def signupUser(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
form.save(commit=False)
username = form.cleaned_data.get('username')
raw_password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=raw_password)
form.save()
try:
login(request, user)
except ValueError:
return redirect('home')
return redirect('home')
else:
form = SignUpForm()
return render(request, 'signup.html', {'form': form})
奇怪的是(至少对我来说很奇怪)。用户已创建,可以正确登录。我不认为这有任何不良副作用,但我会等待标记我的解决方案,以防万一有更好的解决方案。