Пользовательская модель пользователя, пользовательская аутентификация не работают
Я новичок в Django и работаю над проектом, который требует пользовательской модели пользователя, так как я не требую is_staff, is_superuser, is_admin.
Итак, путем поисков и других способов я создал свою собственную пользовательскую модель. Но она не работает, и я застрял на ней на несколько дней.
Будет огромной помощью, если кто-то сможет помочь мне с кодом.
settings.py
AUTH_USER_MODEL = 'accounts.Usermanagement'
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'accounts.backends.EmailAuthBackend',
]
models.py (models + manager)
backends.py
#backends.py
# from django.contrib.auth.models import User
from django.contrib.auth.hashers import check_password
from django.contrib.auth import get_user_model
Usermanagement = get_user_model()
class EmailAuthBackend:
def authenticate(self,request,username=None,password=None):
print(request)
try:
user = Usermanagement.objects.get(emailid=username)
print(password)
print(user.password)
# print(check_password(password))
# print(user.check_password(password))
if user.check_password(password):
return user
return None
except user.DoesNotExist:
return None
def get_user(self,user_id):
try:
return user.objects.get(pk=user_id)
except user.DoesNotExist:
return None
views.py
# views.py
def loginPage(request):
# POST
if request.method == 'POST':
form = AuthenticationForm(request,data=request.POST)
# loginPage.html the html tag has attribute name = username for email ,
# name = password for password
if form.is_valid(): # Form Valid
email = request.POST['username']
password = request.POST['password']
#Check
print("EMAIL: ",email)
print("PASSWORD: ",password)
# Authentication USER
user = authenticate(request,username=email,password=password)
print("Authenticated ",user) # Check
# check
print(user)
if user is not None: # If User found
login(request,user,backend='accounts.backends.EmailAuthBackend')
messages.info(request, f"You are now logged in as {email}.")
return redirect("home")
else: # If User Not found
messages.error(request,"User not found")
return HttpResponse("User not found, not able to login")
else: # Form InValid
messages.error(request,"Invalid username or password.")
return HttpResponse("Form Invalid")
# GET
else:
form = AuthenticationForm()
context = {"form":form}
return render(request,"loginPage.html",context=context)
urls.py и другие конфигурации корректны.
Проблемы:
- check_password : always False
- В БД у меня есть незашифрованный пароль (например: password=admin)
- DB - это унаследованная (существующая) DB, поэтому я сначала создал DB, а затем сделал "python manage.py inspectdb", который создал модели для меня, а затем я изменил несколько вещей, но не изменил имена полей или имя db_table. .
- Я очень хорошо отношусь к созданию пользователя через SHELL.
- В loginPage.html html тег имеет атрибут name = username для email , name = password для password .
если будут другие требования, я отредактирую вопросы
я думаю, что вы не можете использовать функцию check_password в вашем случае, потому что она была создана для случая зашифрованного пароля. Просто сделайте user.password == password
в вашем EmailAuthBackend
Которая является просто
моделью, благодаря views.py. Полагаю, вы имели в виду переменную там.Удалите пароль=password в вашем user=self.model()
Это затрудняет обращение к паролю в вашем user.set_password()