我正在使用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
创建的密码)已正确散列。
因此,在谷歌搜索之后,我发现我需要覆盖AllAuth的save_user()
方法,因此我已经在我的settings.file中设置了ACCOUNT_ADAPTER = 'core.social_adapter.UserAccountAdapter'
,并向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"
。
我错过了什么吗,还是我现在弄错了这个过程?