0

我正在尝试允许 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.
4

1 回答 1

0

看起来 django-auth-ldap正在使用自己的信号来创建用户,这需要一个接收器函数来在用户首次登录时填充用户配置文件模型。

这篇文章有一个对我有用的解决方案!确保将信号放在他们自己的signals.py文件中,配置apps.py等,但是当新的或现有的 ldap 用户登录时,此方法可以创建和/或填充用户配置文件模型。

于 2020-11-06T15:11:45.990 回答