Функция authenticate () не возвращает ничего для зарегистрированных пользователей в mySQL db. Я использую пользовательскую проверку, в которой процесс регистрации работает отлично. Я использую Django 3.0. Значение Account.objects.get(username = "uname").password == request.POST['password']
равно True
, вот мои модели.py
class AccountManager(BaseUserManager):
#pass USERNAME_FIELD, REQUIRED_FIELDS
def create_user(self, email, username, password=None):
if not email:
raise ValueError( "Email Id not entered")
if not username:
raise ValueError("User Name not entered")
user = self.create_user(
email = self.normalize_email(email),
username = username,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, username, password):
user = self.create_user(
email = self.normalize_email(email),
password = password,
username = username,
)
user.is_admin = True
user.is_staff = True
user.is_superuser = True
user.save(using = self._db)
return user
# Create your models here.
class Account(AbstractBaseUser):
username = models.CharField(max_length = 50, unique= True)
email = models.EmailField(verbose_name = "email", max_length = 50, unique=True)
#few other fields...
USERNAME_FIELD = "username"
REQUIRED_FIELDS = ['email']
objects = AccountManager()
# any object from Account.object will return __str__
def __str__(self):
return self.username
#give permitions to custom user object
def has_perm(self, perm, obj=None):
return self.is_admin
def has_module_perms(self, app_label):
return True
views.py
def register(request):
context = {}
if request.POST:
form = RegistrationForm(request.POST)
if form.is_valid():
form.save()
name = form.cleaned_data.get("username")
raw_password= form.cleaned_data.get('password1')
account = authenticate(username = name, password = raw_password)
login(request, account)
print(str(account))
return redirect('../dashboard/')
else:
context['registration_form'] = form
else:
form = RegistrationForm()
context['registration_form'] = form
return render(request, 'register.html')
def login(request):
context = {}
if request.method == "POST":
form = AuthenticationForm(request.POST)
if form.is_valid:#returns True
name = request.POST["username"]
pswd = request.POST["password"]
user = authenticate(request, username = name, password = pswd)
print("user = " + str(user)) #always returns None
if user:
print("valid user " + str(user))
login(request, user)
print("user is " + str(request.user.is_authenticated))
return redirect("../dashboard/")
form = AuthenticationForm()
context['login_form'] = form
return render(request, 'login.html', context)
settings.py
AUTH_USER_MODEL = "authenticate.Account"
AUTHENTICATION_BACKENDS = (
#'authenticate.Accounts.'
'django.contrib.auth.backends.ModelBackend',
)
не могли бы вы увидеть, в чем ошибка?
извините, пожалуйста, мои этикеты, так как это мой первый вопрос в stackoverflow, и, пожалуйста, учтите, что я только начал работать над django несколько недель go