我创建了一个继承自
django.contrib.auth.models.user用户
,并用更多字段扩展它,然后创建一个覆盖
保存()
方法散列密码,但通过此代理创建的用户无法登录。我追踪过程发现
user.check_password()
总是失败,但我不知道原因。
这是我的模型及其代理:
class UserExtended(User):
albums = models.ManyToManyField(Album, null=True, blank=True, verbose_name='Albums')
class Meta:
verbose_name = _("User")
verbose_name_plural = _("Users")
def __str__(self):
return "[{}] {} ({})({}{})".format(self.id, self.email, self.username, self.first_name, self.last_name)
class UserExtendedProxy(UserExtended):
class Meta:
proxy = True
def save(self, *args, **kwargs):
if not self.id:
try:
user = User.objects.get(email=self.email)
except:
pass
else:
raise Exception('eMail already in use.')
self.set_password(self.password)
super(UserExtendedProxy, self).save(*args, **kwargs)
Token.objects.create(user=self)
这是我的
模型后端
:
class EmailBackend(ModelBackend):
def authenticate(self, request, username=None, password=None, **kwars):
UserModel = get_user_model()
try:
user = UserModel.objects.get(email=username)
except UserModel.DoesNotExist:
return None
else:
if user.check_password(password):
return user
return None
我可以在我的数据库中看到,通过这个代理创建的用户实际上存在于
django.contrib.auth.models.user用户
模型,所以我不明白他们为什么不能登录。
另一个问题是通过
python manage.py createsuperuser
不存在的原因
用户扩展代理
.