Я использую Django AllAuth для входа в систему.У меня нет пользовательской формы регистрации пользователя, но я использую пользовательскую модель пользователя.Вот моя модель пользователя:
class User(AbstractUser):
is_candidate = models.BooleanField(default=True)
is_employer = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
username = models.CharField(max_length=40, unique=False, default='')
first_name = models.CharField(_("Ime"), max_length=50, null=True)
last_name = models.CharField(_("Prezime"), max_length=50, null=True)
mobile = models.CharField(_("Telefon"), max_length=20,null=True, blank=True, unique=True)
address = models.CharField(_("Adresa"), max_length=250, null=True, blank=True)
def __str__(self):
return self.email
Теперь, после получения ошибок, что комбинация имя пользователя / пароль при входе в систему не подходит ни для одного и всех пользователей, которых я пытался, я проверил базу данных и заметил, что пароли для зарегистрированных пользователей не хэшируются.совсем.Обратите внимание, что пароли для суперпользователей, те, что я создаю с помощью python manage.py createsuperuser
, правильно хэшируются.
Итак, после поиска в Google, я обнаружил, что мне нужно переопределить метод AllAuth save_user()
, поэтому я установилACCOUNT_ADAPTER = 'core.social_adapter.UserAccountAdapter'
в файле settings.file и добавил следующий код в myproject/core/social_adapter.py
:
class UserAccountAdapter(DefaultAccountAdapter):
print("using account adapter")
def save_user(self, request, user, form, commit=True):
user = super(UserAccountAdapter, self).save_user(request, user, form, commit=False)
user.is_candidate = True
user.password = makepassword( form.cleaned_data['password'] )
print('in custom adapter save_user method')
print(user.password)
user.save()
return user
Это, однако, не помогло вообще.Более того, указанный save_user
метод, похоже, вообще не используется, так как на консоли я печатаю только "using account adapter"
.
Я что-то пропустил или сейчас все неправильно понял?