Django在尝试登录时不会重新配置用户密码



在尝试创建一个带有登录和注册的简单网页时,我遇到了django没有重新注册创建的用户的问题。在views.py中,我创建了一个简单的消息;错误的密码或电子邮件";如果用户不存在。我创建了一个用户,并在我将其输入登录表单时确保密码是正确的,但它仍然会给我"的消息;密码或电子邮件不正确";。而不是像创建的用户一样重定向到主页,如果它出错了,我不明白为什么它不接受表单中的密码/电子邮件。

views.py

from django.shortcuts import redirect, render
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from django.contrib.auth.models import User
def home(request):
return render(request, 'home.html')

def signup(request):
if request.method == "POST":
email = request.POST['email']
password = request.POST['password']
myuser = User(email=email)
myuser.set_password(password)
myuser.save()

messages.success(request, "Your account has been successfully created ")
return redirect('signin')
return render(request, 'signup.html')
def signin(request):
if request.method == "POST":
email = request.POST['email']
password = request.POST['password']
user = authenticate(request, email = email, password = password)

if user is not None: 
login(request, user)
email = user.email 
messages.success(request, "Successfully Logged In")
return redirect ('home')

else:
messages.info(request, "Email or Password is Incorrect")
return render(request, 'signin.html')
return render(request, 'signin.html')

def signout(request):
pass 

urls.py

from django.urls import path
from . import views
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns = [
path('', views.home, name = "home"),
path('signin', views.signin, name = "signin"),
path('signup', views.signup, name = "signup"),
]  
urlpatterns += staticfiles_urlpatterns()

signup.html

<h1>Sign up</h1>
<form action = "/signup" method = "POST">
{% csrf_token %}
<div class="mb-3">
<label for="exampleInputEmail1" class="form-label">Email address</label>
<input type="email" class="form-control" id="email" name = "email" aria-describedby="emailHelp" placeholder = "example@example.com">

<div class="mb-3">
<label for="exampleInputPassword1" class="form-label">Password</label>
<input type="password" class="form-control" id="password" name = "password">
</div>
<button type="submit" class="btn btn-primary">Sign up</button>
</form>

signin.html(登录页面(

<h1>Login</h1>
{%if messages%}
{%for message in messages%}
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<strong>Hey,</strong> {{ message }}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endfor %}
{% endif %}
<form action = "/signin" method = "POST"> 
{% csrf_token %}
<div class="row mb-3">
<label for="inputEmail3" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="email" name = "email">
</div>
</div>
<div class="row mb-3">
<label for="inputPassword3" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input type="password" class="form-control" id = "password" name = "password">
</div>
<div class="col-sm-10">
</div>
<button type="submit" class="btn btn-primary">Sign in</button>
</form>

您的用户的状态是什么非活动用户是指其is_active字段设置为False的用户。默认后端ModelBackend和RemoteUserBackend禁止非活动用户进行身份验证。您没有指定用户状态。因此,请同时检查用户状态。

您可以通过以下方式改进此部分:

myuser = User(email=email, is_active=True)
myuser.set_password(password)
myuser.save()

要设置密码,您必须使用set_password功能。

相关内容

最新更新