Django_auth_ldap:来自LDAP post_save信号'created'标志的用户始终为false

时间:2019-05-15 11:45:04

标签: django python-3.x django-authentication django-signals django-auth-ldap

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

1 个答案:

答案 0 :(得分:0)

It looks like django-auth-ldap使用自己的信号来创建用户,这需要接收器功能来在用户首次登录时填充用户配置文件模型。

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