Django: Невозможно войти в систему после успешной регистрации
Когда я пытаюсь войти в систему после успешной регистрации, я продолжаю получать ошибку. Возможно, это связано с тем, что пароль не хэшируется для подтверждения пароля, сохраненного в базе данных, потому что после регистрации я вижу хэшированный пароль. Я также установил для пользователя is_active значение true. Я в полном замешательстве, почему это происходит
models.py
from locale import normalize
from django.db import models
from django.contrib.auth.models import AbstractBaseUser,BaseUserManager
# Create your models here.
class MyAccountManager(BaseUserManager):
def create_user(self,first_name,last_name,username,email,password=None):
if not email:
raise ValueError("Enter valid email address")
if not username:
raise ValueError("User must have a username")
user = self.model(
email = self.normalize_email(email),
username = username,
first_name = first_name,
last_name = last_name,
)
user.set_password(password)
user.save(using=self._db)
return user
#Creating a user with admin like privileges
def create_super_user(self,first_name,last_name,username,email,password=None):
user = self.create_user(
first_name=first_name,
last_name=last_name,
username=username,
email=self.normalize_email(email),
password=password
)
#assigning privileges to the super user
user.is_active=True
user.is_admin=True
user.is_superadmin=True
user.is_staff=True
user.save(using=self._db)
return user
class Account(AbstractBaseUser):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
username = models.CharField(max_length=100,unique=True)
email = models.CharField(max_length=100,unique=True)
password = models.CharField(max_length=100)
date_joined = models.DateTimeField(auto_now_add=True)
last_login = models.DateTimeField(auto_now_add=True)
is_active = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
is_superadmin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
#customizing the default admin panel fields
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username','first_name','last_name']
objects = MyAccountManager()
def __str__(self):
return self.email
def has_perm(self,perm,obj=None):
return self.is_admin
def has_module_perm(self,add_label):
return True
views.py
from django.http import HttpResponse
from django.shortcuts import render, redirect
from .models import Account
from .forms import RegistrationForm
from django.contrib import auth,messages
from django.contrib.auth import login, authenticate
# Create your views here.
def signup(request):
if request.method=="POST":
form = RegistrationForm(request.POST)#contain all form values
if form.is_valid():
first_name = form.cleaned_data['first_name']
last_name = form.cleaned_data['last_name']
email = form.cleaned_data['email']
password = form.cleaned_data['password']
username = form.cleaned_data['username']
user = Account.objects.create_user(first_name=first_name,last_name=last_name,email=email,username=username,password=password)#this method is present in models.py file
user.is_active=True
user.save()
messages.success(request,"Your account has been created!")
else:
form = RegistrationForm()
context = {
'form':form,
}
return render(request,'signup.html',context)
def login(request):
if request.method == "POST":
email = request.POST['email']
password = request.POST['password']
user = auth.authenticate(email=email,password=password)
if user is not None:
auth.login(request,user)
messages.success(request,"You are now logged in")
return redirect('home')
else:
messages.error(request,"Invalid login credentials")
return redirect('login')
return render(request,'login.html')
login.html
Следуйте этому руководству. Я думаю, что вы создали неправильную учетную запись. https://docs.djangoproject.com/en/4.0/intro/tutorial07/