我们最近从一个LDAP系统切换到另一个。不幸的是,不仅LDAP服务器发生了变化,而且所有用户名也都发生了变化。
我设法配置django_auth_ldap
来处理两个LDAP服务器,但是我无法阻止在我的数据库中创建新用户。
我试图将一个监听器连接到django_auth_ldap.backend.populate_user.connect
,但该信号被评估after
用户已被创建。
那么最好的办法是什么:
编辑我知道信号处理程序,但我不知道如何(以及代码中的位置)解决防止重复用户创建的任务。我应该在哪里挂钩检查旧用户名和新用户名?
EDIT2:
我尝试过关注,但仍在创建new_name
用户。
# touple of old user and new user names
username_list = [('old_name', 'new_name') ]
@receiver(pre_save, sender=User)
def check_if_user_exists(sender, **kwargs):
try:
print "check_if_user_exists:"
user_instance = kwargs['instance']
print user_instance
if any([x[1] == user_instance.username for x in username_list]):
print "new user name found!"
# get old username
user = User.objects.get(username = x[0])
user.username = user_instance.username
return user
else:
print "user not found :("
except ObjectDoesNotExist:
print ('user not found')
pass
答案 0 :(得分:0)
这是您在signal_handler
上实施pre_save
的方法。这些应该存在于您的models.py
。
@receiver(pre_save, sender=MyModel)
def check_if_user_exists_based_on_whatever(sender, **kwargs):
try:
user = MyModel.objects.get(kwargs['instance'].<field_to_get_on_model>)
user.username = "new_username"
user.save()
except ObjectDoesNotExist:
user = MyModel.create(name="mymyself", lastname="andI")
这只是一个基本的例子,我真的不知道你的所有验证逻辑。 ^ _ ^
答案 1 :(得分:0)
我最终编写了自己的身份验证后端,覆盖了get_or_create_user
。