【发布时间】:2019-10-02 13:16:47
【问题描述】:
我正在尝试允许 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()
第一次登录时,配置文件永远不会被创建,因为“created”总是“False”
<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.
【问题讨论】:
-
在login
User没有创建,然后他登录,所以用户已经存在。 -
但是创建了一个数据库记录不构成“创建”吗?您对我如何在 LDAP 用户登录时创建此配置文件对象有什么建议吗?
-
但在这里看起来
User记录已经创建。User不会在登录/注销时创建/删除。看起来您的 LDAP 系统已经“主动”构建了用户,或者您可能没有为User模型使用数据库? -
在我登录之前用户对象不存在。LDAP 获取了我的用户属性并创建了数据库记录。在我登录之前,该用户从未存在于 Django 中。
标签: django python-3.x django-authentication django-signals django-auth-ldap