capricornxl/ad-password-self-service

自助重置密码中账号由mail改为userid值

Opened this issue · 17 comments

大佬,企微的接入在重置密码页面需要使用userid为账户信息,如何更改

方便贴个图么?目前是有报错,对吗?
检验的逻辑是通过企业微个的企业邮箱,来提取用户名(一般情况下,企业邮箱前缀和用户和账号是一样的)
将提取出来的邮箱前缀做为AD的账户,再到AD上做一次检验,查看当前用户是否有效。

大佬,我这有一半人的用户名为caozhu 邮箱地址为zhu.cao

🤣,那这种就比较麻烦了。
企业微信上还有其它标识和AD上能对应上的吗?
如果说caozhu 邮箱地址为zhu.cao这种规律比较固定,你可以尝试在账号检验的逻辑里,加一个尝试将账号caozhu转换成zhu.cao这种格式,再尝试做一次检验,2种格式,任意一种检验通过就算OK。

下午我让python同事先看看 最好的方式还是userinfo中获取userid信息

另外也有个性化英文名为邮箱的,转换的路子走不通

userinfo 之前是用的这个,后面我忘了啥原因,API有限制,你们看看能不能解决。
如果这个方式可行的话,麻烦告诉我一下哈,😁

不敢相信,我在format_username.py 中把email 改为userid .重启后成了

😂,那说明你们直接用的就是userid,你们应该是有企微和AD之间做同步吧?

是的,还有一个问题;密码复杂度不符合的情况下提示我想不显示错误信息,就显示密码不符合复杂度要求等文件信息;这个msg可以改哪个文件的(resetpwd功能页面)

密码复杂度后端的检查做得比较粗糙,就在form里,检验表单,如果不符合正则,就返回error_message。
应该是在index那里面,这里没太细分,你把那个else的逻辑改下就行。

image
我想把这个error_message就改成密码复杂度不符合的直白信息

image
这里改哪个合适 我就不引用err_message值就行了

image
这里实际是已经有复杂度校验了,看上面的报错是走到下面的逻辑了。每次修改密码或重置密码,都会去调一次解锁账号。
因为你也清楚有时密码错误次数过多,账号是锁定的。
看上面的报错是解锁账号失败了。

看下日志中的报错信息是啥。

这个错误就是 用户名为test1131 新密码设置为Test1131@ ,新密码在AD域的复杂度校验不通过;
我想直接固定这个消息为,
账号未能解锁,错误信息:密码不能包含用户名的连续字符,请重新设定密码

修改resetpwd/utils.py
引入LDAPUnwillingToPerformResult
from ldap3.core.exceptions import LDAPException, LDAPUnwillingToPerformResult

在109行开始插入

    except LDAPUnwillingToPerformResult:
        context = {
            'global_title': TITLE,
            'msg': '账号未能解锁/修改,错误信息:密码复杂度不符合要求。',
            'button_click': "window.location.href='{}'".format('/auth'),
            'button_display': "重新认证授权"
        }
        return render(request, msg_template, context)

见图示例
image

在ldap3的exceptions.py定义了所有LDAP的连接异常,如果说需要详细的输出不同异常的消息,可以参照上面的形式返回你要的消息。