Bug: 钉钉 SSO 登录认证失败 "NoneType" object is not subscriptable
Pre-checks
Deployment Method
Docker / Self-hosted
Description
钉钉 SSO 登录时报错 Auth failed: 'NoneType' object is not subscriptable,无法正常登录。
Steps to Reproduce
- 在钉钉客户端或网页端点击"钉钉登录"
- 完成钉钉授权
- 系统跳转回 Clawith 后报错
Error Message
Auth failed: 'NoneType' object is not subscriptable
Root Cause (Suspected)
用户邮箱同步时出现重复身份冲突:
Sync complete: 411 depts, 3457 members synced.
Warning: Member manager3382:
(sqlalchemy.dialects.postgresql.asyncpg.IntegrityError)
duplicate key value violates unique constraint "ix_identities_email"
DETAIL: Key (email)=(xiaoan@fu18.cn) already exists.
分析:
- 用户之前已用邮箱
xiaoan@fu18.cn 注册过 Clawith 账号
- 钉钉同步也产生了相同邮箱的身份记录
- 数据库唯一约束冲突导致身份合并失败
- 认证流程中某个字段变为
None,触发 NoneType 错误
Environment
- Clawith 版本:[请填写]
- 部署方式:Docker
- 钉钉配置:已配置 DINGTALK_CLIENT_ID, DINGTALK_CLIENT_SECRET 等环境变量
Expected Behavior
钉钉 SSO 应该正常工作,用户可以通过钉钉扫码登录。
Actual Behavior
认证失败,报 NoneType 错误,用户无法登录。
Impact
- 严重程度:P0
- 钉钉登录功能完全不可用
- 影响所有使用钉钉 SSO 的用户
- 如果用户的唯一登录方式是钉钉 SSO,将无法访问系统
Suggested Fix
- 在身份认证流程中添加空值检查,避免
NoneType 错误
- 处理邮箱重复场景时给出明确提示,而非静默失败
- 考虑在钉钉同步时使用
ON CONFLICT DO UPDATE 代替直接 INSERT
- 添加钉钉 SSO 登录的完整单元测试覆盖
Additional Context
错误堆栈表明问题发生在认证回调处理阶段,当尝试访问某个应为字典/对象的字段时,该字段实际为 None。
请产研团队优先排查此问题,非常紧急。
Bug: 钉钉 SSO 登录认证失败 "NoneType" object is not subscriptable
Pre-checks
Deployment Method
Docker / Self-hosted
Description
钉钉 SSO 登录时报错
Auth failed: 'NoneType' object is not subscriptable,无法正常登录。Steps to Reproduce
Error Message
Root Cause (Suspected)
用户邮箱同步时出现重复身份冲突:
分析:
xiaoan@fu18.cn注册过 Clawith 账号None,触发NoneType错误Environment
Expected Behavior
钉钉 SSO 应该正常工作,用户可以通过钉钉扫码登录。
Actual Behavior
认证失败,报
NoneType错误,用户无法登录。Impact
Suggested Fix
NoneType错误ON CONFLICT DO UPDATE代替直接INSERTAdditional Context
错误堆栈表明问题发生在认证回调处理阶段,当尝试访问某个应为字典/对象的字段时,该字段实际为 None。
请产研团队优先排查此问题,非常紧急。