eryajf / go-ldap-admin

🌉 基于Go+Vue实现的openLDAP后台管理项目
http://ldapdoc.eryajf.net
Apache License 2.0
1.53k stars 259 forks source link

🐛 钉钉用户列表失败 | [Bug] Key: 'DeptDetailUserInfo.DeptId' Error:Field validation for 'DeptId' failed on the 'min' tag #291

Closed jiangslee closed 6 months ago

jiangslee commented 9 months ago

您使用的版本? | Your usage version?

$ docker compose ps -a
NAME                         IMAGE                                                               COMMAND                  SERVICE                CREATED             STATUS              PORTS
go-ldap-admin-openldap       registry.cn-hangzhou.aliyuncs.com/ali_eryajf/openldap:1.4.0         "/container/tool/run…"   openldap               18 minutes ago      Up 18 minutes       636/tcp, 0.0.0.0:388->389/tcp, :::388->389/tcp
go-ldap-admin-phpldapadmin   registry.cn-hangzhou.aliyuncs.com/ali_eryajf/phpldapadmin:0.9.0     "/container/tool/run"    phpldapadmin           18 minutes ago      Up 18 minutes       443/tcp, 0.0.0.0:8091->80/tcp, :::8091->80/tcp
go-ldap-admin-server         registry.cn-hangzhou.aliyuncs.com/ali_eryajf/go-ldap-admin-server   "/bin/sh -c './wait …"   go-ldap-admin-server   18 minutes ago      Up 15 minutes       0.0.0.0:8888->8888/tcp, :::8888->8888/tcp
go-ldap-admin-ui             registry.cn-hangzhou.aliyuncs.com/ali_eryajf/go-ldap-admin-ui       "/bin/sh -c 'nginx -…"   go-ldap-admin-ui       18 minutes ago      Up 18 minutes       0.0.0.0:8090->80/tcp, :::8090->80/tcp

您使用的场景? | Your usage scenarios?

想把钉钉组织架构同步到ldap后应用到群晖,实现免登

您做了什么操作? | What did you do?

dingtalk:
    dept-list:    # 配置要同步的部门列表,配置留空则同步所有部门,在开头加^表示不同步此部门
        - "^-7"

image

您遇到了什么问题? | What are your problems?

SyncDingTalkUsers获取钉钉用户列表失败:Key: 'DeptDetailUserInfo.DeptId' Error:Field validation for 'DeptId' failed on the 'min' tag

https://github.com/zhaoyunxing92/dingtalk/blob/c1568b7fbac5c8d6bf9bd10594d52004694cc8f5/request/dept_detail_user_info.go#L26

您期望的结果是怎样的? | What is your expected outcome?

  1. 能跑就行
  2. 常用的动态字段关系管理有初始值,不想一个个字段进行复制粘贴。
eryajf commented 9 months ago

您好 @jiangslee👋,我已收到您的反馈,我将安排时间考虑您提交的信息并进行回复。-- 这条信息是由自动回复的机器人发出的。

Hello @jiangslee. I have received your feedback, and I will arrange time to consider the information you submitted and reply. -- This message is sent by an automatic reply robot.

eryajf commented 9 months ago

先看看钉钉后台那边,是否真的有-7这个ID,后来你把-7排除,然后重新跑的时候是不会同步吗?

第二个问题怎么说呢,这个可以考虑,随后我看看刷一些默认数据。只不过有时候有的朋友他的数据不一定适用,所以一开始没有填充默认数据。

jiangslee commented 9 months ago

先看看钉钉后台那边,是否真的有-7这个ID,后来你把-7排除,然后重新跑的时候是不会同步吗?

第二个问题怎么说呢,这个可以考虑,随后我看看刷一些默认数据。只不过有时候有的朋友他的数据不一定适用,所以一开始没有填充默认数据。

image

https://open.dingtalk.com/document/isvapp/common-errors

image

这个是个家校通讯录的特殊ID,我排除-7后,点击获取钉钉用户docker compose logs -f查看到只会一直刷获取用户详情的接口,但是数据库没有一个用户入库

image

eryajf commented 9 months ago

查看到只会一直刷获取用户详情的接口,但是数据库没有一个用户入库

按说刷这个日志就是在同步用户了,你这个接口最后的结果是什么呢,正常的200吗,还是有异常报错。也可以到数据库看看user表有没有对应数据

jiangslee commented 8 months ago
  1. 最后的结果是返回200 image

  2. 数据库user表没有数据 image

  3. phpLdapAdmin的people没有数据 image

eryajf commented 8 months ago

分组的数据都正常落库了吗。从目前提供的信息来看,一切都没问题,看不出来是什么原因

jiangslee commented 8 months ago

分组的数据都正常落库了吗。从目前提供的信息来看,一切都没问题,看不出来是什么原因

我大概定位到原因了,下面这个配置只会按已手动输入的部门ID列表进行同步,我只输入了- "^-7",没有其它部门ID所以不入库。

dingtalk:
    dept-list:    # 配置要同步的部门列表,配置留空则同步所有部门,在开头加^表示不同步此部门
        - "^-7"

查看代码逻辑:

https://github.com/eryajf/go-ldap-admin/blob/d00d6df8a114e0d4378dffeadf2c8f602b9dd13d/public/client/dingtalk/dingtalk.go#L16C5-L39

我临时改了点代码测试能入库了: image

然后遇到新问题,再看看

{
    "code": 506,
    "data": null,
    "msg": "SyncDingTalkUsers写入用户失败:添加用户: ***, 失败: AddUser向LDAP创建用户失败:LDAP Result Code 21 \"Invalid Attribute Syntax\": mail: value #0 invalid per syntax"
}

改进思路:

eryajf commented 8 months ago

关于排除这个逻辑,我周末再测试验证一下,可能是有问题的。

你下边的这个错误,是说邮箱的字段语法有问题,这个建议你可以先把数据拿到看看长什么样