Skip to content

保留认证失败响应中的 ecode,便于外部程序可靠处理错误 #54

Description

@BaksiLi

目前 libauth.LoginLogout 收到认证失败响应时,会读取返回值中的
ecode,再通过 PortalError 映射成一段错误文本:

ecode, _ := loginResp["ecode"].(string)
if strerr, exist := PortalError[ecode]; exist {
err = errors.New(strerr)
} else {
err = errors.New(res)

这样给人看日志没有问题,但原始错误码在返回时丢失了。调用方如果想
区分“密码错误”“认证过于频繁”“账号欠费”和普通网络超时,只能匹配
错误文本。

我是在给无人值守机器做断线恢复时遇到这个问题的。不同失败原因需要
不同处理:

  • DNS、TLS、超时等网络错误:稍后重试同一账号;
  • E2532E2533 等频率限制:延长退避;
  • E2553 密码错误、E2606 用户被禁用:停止自动重试;
  • 账号额度或授权状态异常:通知管理员,或由外部程序选择另一份明确配置。

最后一种场景也可能涉及多账号故障切换,但我不确定这部分逻辑是否适合
放进 GoAuthing。CLI 已经支持通过 -c 选择配置,重试、状态管理和账号
选择可以继续交给 systemd、procd 或其他外部程序。

这里建议只补足底层信息。一种可能的实现是:

  1. libauth 中增加包含 CodeMessage 的错误类型;
  2. CLI 输出错误时保留错误码,例如 E2553: 密码错误
  3. 不修改现有配置格式,也不改变认证、保活和重试行为。

这样既方便排查问题,也让外部程序不必依赖中文错误文本。具体错误类型和
输出格式可以按项目现有习惯调整。

如果这个方向合适,我可以先提交一个只涉及错误类型和测试的小 PR。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions