0

我们最近从一个 LDAP 系统切换到另一个。不幸的是,不仅 LDAP 服务器发生了变化,而且所有用户名也发生了变化。

我设法配置django_auth_ldap处理两个 LDAP 服务器,但是我无法阻止在我的数据库中创建新用户。

我试图连接一个监听器,django_auth_ldap.backend.populate_user.connect但该信号被评估after为一个用户已经创建。

那么最好的方法是什么:

  • 验证用户
  • 检查用户名是否在数据库中
  • 检查数据库中的替代用户名
  • 必要时更新用户名(找到新旧用户映射)
  • 如果在任何地方都找不到,则创建新用户

编辑我知道信号处理程序,但我不知道如何(以及在​​代码中的何处)解决防止重复用户创建的任务。我应该在哪里连接我的代码来检查旧用户名和新用户名?

编辑2:

我已尝试关注,但仍在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
4

2 回答 2

0

这就是您在 asignal_handler上实现 a 的方式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")

这只是一个基本示例,我并不真正了解您的所有验证逻辑。^_^

于 2013-04-15T15:23:21.823 回答
0

我最终编写了自己的身份验证后端,覆盖get_or_create_user.

于 2013-04-15T17:45:50.167 回答