我编写了一个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,我认为这段代码会起作用。在
提前感谢您提供的任何见解。在
这似乎是pythonldap模块的一个问题。一个快速的解决方法是用
str()
转换所有Unicode字符串。我可以用这种方式在OpenLDAP目录中存储包括密码在内的属性。我在用python.ldap直接,不是通过Django。在相关问题 更多 >
编程相关推荐