【发布时间】:2020-11-17 23:18:36
【问题描述】:
我正在编写自定义 django 身份验证代码,该代码可以很好地创建用户,但是当我尝试登录时,就像我再次注册一样,因此无法访问我的用户帐户,因为每次我尝试登录,我收到一个错误,因为具有该凭据的用户已经存在(我就是那个用户)。
输出为:<ul class="errorlist"><li>address<ul class="errorlist"><li>User with this Address already exists.</li></ul></li></ul>
Models.py:
class AppUser(AbstractUser):
username = models.TextField(unique=True)
address = models.CharField(max_length=34, unique=True)
key = models.CharField(max_length=34)
def __str__(self):
return self.username
Forms.py:
class NewUserForm(forms.ModelForm):
class Meta:
model = AppUser
fields = ("username", "address", "key")
def save(self, commit=True):
user = super(NewUserForm, self).save(commit=False)
user.address = self.cleaned_data["address"]
user.key = self.cleaned_data['key']
if commit:
user.save()
return user
class LoginUserForm(forms.ModelForm):
class Meta:
model = AppUser
fields = ("address", "key")
def __init__(self, request=None, *args, **kwargs):
self.request = request
super().__init__(*args, **kwargs)
Backends.py:
class AppUserBackend(ModelBackend):
def authenticate(self, request, **kwargs):
address = kwargs['address']
key = kwargs['key']
try:
customer = AppUser.objects.get(address=address)
if customer.key == key:
return customer.user
else:
print("Error")
except AppUser.DoesNotExist:
pass
Views.py:
def login_request(request):
if request.method == 'POST':
form = LoginUserForm(request=request, data=request.POST)
if form.is_valid():
address = form.cleaned_data.get('address')
key = form.cleaned_data.get('key')
user = authenticate(request=request, address=address, key=key)
if user is not None:
login(request, user, backend='main.backends.AppUserBackend')
return redirect("main:home")
else:
print("User is none")
else:
print("Not valid")
form = LoginUserForm()
return render(request = request,
template_name = "main/login.html",
context={"form":form}
)
def register(request):
if request.method == "POST":
form = NewUserForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user, backend='main.backends.AppUserBackend')
return redirect("main:index")
return render(request = request,
template_name = "main/register.html",
context={"form":form})
form = NewUserForm
return render(request = request,
template_name = "main/register.html",
context={"form":form}
)
当我运行代码时,我可以毫无问题地创建用户,并且用户存储在数据库中,但是当我尝试登录时,就像我再次创建用户一样。我知道我错过了,但不知道是什么。
【问题讨论】:
-
你检查过路线吗?
-
是的,我有。我在登录和注册的正确页面上
标签: python django django-models django-forms django-authentication