目前 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、超时等网络错误:稍后重试同一账号;
E2532、E2533 等频率限制:延长退避;
E2553 密码错误、E2606 用户被禁用:停止自动重试;
- 账号额度或授权状态异常:通知管理员,或由外部程序选择另一份明确配置。
最后一种场景也可能涉及多账号故障切换,但我不确定这部分逻辑是否适合
放进 GoAuthing。CLI 已经支持通过 -c 选择配置,重试、状态管理和账号
选择可以继续交给 systemd、procd 或其他外部程序。
这里建议只补足底层信息。一种可能的实现是:
- 在
libauth 中增加包含 Code 和 Message 的错误类型;
- CLI 输出错误时保留错误码,例如
E2553: 密码错误;
- 不修改现有配置格式,也不改变认证、保活和重试行为。
这样既方便排查问题,也让外部程序不必依赖中文错误文本。具体错误类型和
输出格式可以按项目现有习惯调整。
如果这个方向合适,我可以先提交一个只涉及错误类型和测试的小 PR。
目前
libauth.LoginLogout收到认证失败响应时,会读取返回值中的ecode,再通过PortalError映射成一段错误文本:GoAuthing/libauth/requests.go
Lines 263 to 267 in d38bc5b
这样给人看日志没有问题,但原始错误码在返回时丢失了。调用方如果想
区分“密码错误”“认证过于频繁”“账号欠费”和普通网络超时,只能匹配
错误文本。
我是在给无人值守机器做断线恢复时遇到这个问题的。不同失败原因需要
不同处理:
E2532、E2533等频率限制:延长退避;E2553密码错误、E2606用户被禁用:停止自动重试;最后一种场景也可能涉及多账号故障切换,但我不确定这部分逻辑是否适合
放进 GoAuthing。CLI 已经支持通过
-c选择配置,重试、状态管理和账号选择可以继续交给 systemd、procd 或其他外部程序。
这里建议只补足底层信息。一种可能的实现是:
libauth中增加包含Code和Message的错误类型;E2553: 密码错误;这样既方便排查问题,也让外部程序不必依赖中文错误文本。具体错误类型和
输出格式可以按项目现有习惯调整。
如果这个方向合适,我可以先提交一个只涉及错误类型和测试的小 PR。