Django中的LDAP:需要将unicode密码作为字符串传递

2024-06-25 23:02:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个python脚本来更改AD中的密码,从命令行可以很好地工作。现在我将该脚本传输到Django,以便创建一个更改密码页面。除了一件事之外,一切似乎都正常工作:出于某种原因,我在Django中不断收到一个TypeError,它建议将字符串而不是unicode对象传递给AD。当然,当我这样做时,AD会抗议,因为密码不再是unicode。我猜我忽略了一些简单的事情,但我不知道是什么。在

下面是视图.py我认为应该工作的代码(在命令行版本中确实有效)。我将unicode()添加到密码中,只是为了表明它们实际上是unicode,尽管它们在这些行之前绝对是unicode。在

import ldap
def changePassword(request):
    t = ldap.initialize(server) 
    . . .
    t.simple_bind_s('**********', '****')
    . . .
    mod_attrs = [(ldap.MOD_DELETE, 'unicodePwd', [unicode(oldPassword)]), 
                (ldap.MOD_ADD, 'unicodePwd', [unicode(newPassword)])]
    t.modify_s(dn, mod_attrs)

错误:

^{pr2}$

修改后的版本不会引发异常,但也不会更改密码(因为密码不是以unicode格式传递的):

mod_attrs = [(ldap.MOD_DELETE, 'unicodePwd', [str(oldPassword)]), 
            (ldap.MOD_ADD, 'unicodePwd', [str(newPassword)])]
t.modify_s(dn, mod_attrs)

有人知道是什么导致了这个unicode问题吗?如果我可以在Django中防止异常并保留unicode,我认为这段代码会起作用。在

提前感谢您提供的任何见解。在


Tags: django代码命令行版本脚本mod密码unicode
1条回答
网友
1楼 · 发布于 2024-06-25 23:02:20

这似乎是pythonldap模块的一个问题。一个快速的解决方法是用str()转换所有Unicode字符串。我可以用这种方式在OpenLDAP目录中存储包括密码在内的属性。我在用python.ldap直接,不是通过Django。在

相关问题 更多 >