Пользовательский логин Django не проходит аутентификацию
Я создаю пользовательское создание пользователя. регистрация пользователя работает, но не удается войти, работает нормально в админке, но не через мою форму.
Мой loginclass в forms.py
class LoginForm(forms.Form):
email = forms.EmailField(label='Email')
password = forms.CharField(widget=forms.PasswordInput)
def __init__(self, request, *args, **kwargs):
self.request = request
super(LoginForm, self).__init__(*args, **kwargs)
def clean(self):
request = self.request
data = self.cleaned_data
email = data.get("email")
password = data.get("password")
qs = User.objects.filter(email=email)
if qs.exists():
# user email is registered, check active/
not_active = qs.filter(is_active=False)
if not_active.exists():
raise forms.ValidationError("This user is inactive.")
user = authenticate(request, email=email, password=password)
if user is None:
raise forms.ValidationError("Invalid credentials")
login(request, user)
self.user = user
return data
Это из моего файла views.py
User = get_user_model()
def login_page(request):
form = LoginForm(request.POST or None)
context = {
"form": form
}
if form.is_valid():
email = form.cleaned_data.get("email")
password = form.cleaned_data.get("password")
user = authenticate(request, email=email, password=password)
if user is not None:
login(request, user)
else:
# Return an 'invalid login' error message.
print("Error")
return render(request, "accounts/login.html", context)
В моем settings.py я установил
LOGIN_REDIRECT_URL = '/'
Мой html здесь
<form method="post">
{% csrf_token %}
{{ form.non_field_errors }}
{{ form.source.errors }}
{{ form.source }}
<div class="form-group">
<input class="form-control"
type="email"
name="{{ form.email.name }}"
id="{{ form.email.id_for_label }}"
{% if form.email.value != None %}value="{{ form.email.value|stringformat:'s' }}"{% endif %}
{% if form.email.field.required %}required{% endif %}
placeholder="Email Address" />
</div>
<div class="form-group">
<input class="form-control"
type="password"
name="{{ form.password.name }}"
id="{{ form.password.id_for_label }}"
{% if form.password.value != None %}value="{{ form.password.value|stringformat:'s' }}"{% endif %}
{% if form.password.field.required %}required{% endif %}
placeholder="*********" />
<div class="text-right">
<small><a href="#">Forgot password?</a></small>
</div>
</div>
<button class="btn btn-lg btn-block btn-primary" role="button" type="submit">
Log in
</button>
<small>Don't have an account yet? <a href="#">Create one</a></small>
</form>
Я не могу получить сообщение об ошибке, сервер возвращает POST 200, но не login inn... Я уверен, что я что-то напутал, но не могу понять, где именно.
Моя догадка заключается в том, что форма не действительна по предоставленному вами описанию. Попробуйте напечатать form.errors
после вызова form.is_valid()
и посмотреть, правильно ли отправлена ваша форма.
Согласно вашему коду, если форма недействительна, пользователь не будет аутентифицирован.