gpt4 book ai didi

python - Django 中的 LDAP : required to pass unicode password as string

转载 作者:太空狗 更新时间:2023-10-30 03:05:00 27 4
gpt4 key购买 nike

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

下面是我认为应该有效的 views.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)

错误:

('expected a string in the list', u'pass!word')

Request Method: POST
Request URL: http://127.0.0.1:8000/index/
Django Version: 1.4.2
Exception Type: TypeError
Exception Value:
('expected a string in the list', u'pass!word')

Exception Location: /usr/lib/python2.7/dist-packages/ldap/ldapobject.py
in _ldap_call, line 96
Python Executable: /usr/bin/python
Python Version: 2.7.3

修改后的版本没有抛出异常但也没有更改密码(因为密码不是以unicode传递的):

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

有谁知道可能导致此 unicode 问题的原因是什么?如果我可以防止 Django 中的异常并保留 unicode,我认为这段代码可以工作。

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

最佳答案

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

关于python - Django 中的 LDAP : required to pass unicode password as string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13830574/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com