我正在尝试允许LDAP用户登录到我的Django应用程序。每个用户都需要一些其他属性,这些属性我想存储在用户配置文件模型中。
我已经实现了'post_save'信号来在初始登录时创建用户配置文件,但是,我发现对于LDAP用户,即使他们从未登录过,其创建的标志也始终为False。
唯一的created = True
是我使用manage.py创建新的超级用户
我的post_save看起来像这样:
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
print(sender)
print("USERPROFILE1: {0} with id {1}".format(instance, instance.pk))
print("CREATION: {0}".format(created))
if created:
print("USERPROFILE3")
UserProfile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
print("USERPROFILE2")
instance.userprofile.save()
首次登录时,永远不会创建配置文件,因为“创建”始终为“假”
<class 'django.contrib.auth.models.User'>
USERPROFILE1: lbird with id 1
CREATION: False
User has no userprofile. while authenticating
[...]
django.contrib.auth.models.User.userprofile.RelatedObjectDoesNotExist: User has no userprofile.
答案 0 :(得分:0)
It looks like django-auth-ldap
使用自己的信号来创建用户,这需要接收器功能来在用户首次登录时填充用户配置文件模型。
This post有一个对我有用的解决方案!确保将信号放置在自己的signals.py
文件中,配置apps.py
等,但是当新的或现有的ldap用户登录时,此方法都可以创建和/或填充用户配置文件模型。 / p>