cnb-rs auth status
cnb-rs auth status [flags]显示当前域名下所有已知账号的认证状态。输出风格参考 gh auth status:domain 粗体顶层,下面缩进列出每个 entry(环境变量 + 已保存的多个账号),每个 entry 用 ✓ / ✗ 图标标记是否通过 GET /user 校验,并显示 Token、登录方式、过期时间等。
任一账号校验失败 → 命令以 exit 1 退出,可作为 CI 健康检查使用。
TIP
Token 脱敏规则:长度大于 12 时保留前 4 位和后 4 位(如 cnb_****nQRo),中间用 **** 替代;使用 -t / --show-token 可显示完整 Token。
TIP
颜色输出仅在 stderr 是 TTY 时启用;重定向到文件或管道时输出纯文本,不包含 ANSI 转义。
选项
-t, --show-token: 显示完整 token(默认掩码)-a, --active: 只显示当前 active 账号
继承的全局选项:
--domain <DOMAIN>: 检查指定域名的认证状态(默认:cnb.cool)
Token 来源优先级
cnb-rs 按以下顺序查找并展示 Token:
- 域名特定环境变量 —
CNB_TOKEN_{DOMAIN}(域名去掉.和-,如CNB_TOKEN_cnbcool) - 通用环境变量 —
CNB_TOKEN - keyring — 当前 domain 下已保存账号,可能是 OAuth blob 或 PAT 裸字符串
- 配置文件 —
~/.cnb/config.toml中以明文存储的 PAT
环境变量存在时,会作为单独的 entry 显示在最上方(标记 "由环境变量提供"),并在被覆盖的 stored 账号末尾追加 ! 该账号的 token 已被环境变量覆盖 提示。
登录方式识别
auth status 通过解析 keyring secret 自动识别每个账号的登录模式:
- PAT:keyring 存的是裸 Token 字符串,仅显示
登录方式: PAT - OAuth (可静默刷新):keyring 存的是
OAuthSecretBlobJSON 且含refresh_token,额外显示Token 过期: YYYY-MM-DD HH:MM:SS (Xd Yh 后) - OAuth (无 refresh_token):JSON 中缺
refresh_token,提示需要重新登录续期
示例
bash
# 已登录状态(OAuth)
$ cnb-rs auth status
cnb.cool
✓ 已登录到 cnb.cool,账号 octocat (keyring)
- Active account: true
- Token: cnb_****nQRo
- 登录方式: OAuth (可静默刷新)
- Token 过期: 2026-05-23 10:00:00 (5d 12h 后)
# 多账号(OAuth + PAT)
$ cnb-rs auth status
cnb.cool
✓ 已登录到 cnb.cool,账号 alice (keyring)
- Active account: true
- Token: cnb_****abcd
- 登录方式: OAuth (可静默刷新)
- Token 过期: 2026-05-23 10:00:00 (5d 12h 后)
✓ 已登录到 cnb.cool,账号 bob (config file)
- Active account: false
- Token: cnb_****xyz1
- 登录方式: PAT
# 使用环境变量认证
$ CNB_TOKEN=cnb_xxxxxxxxxxxx cnb-rs auth status
cnb.cool
✓ 使用环境变量 CNB_TOKEN 登录到 cnb.cool,账号 octocat
- Active account: true (由环境变量提供)
- Token: cnb_****xxxx
# 环境变量 + 已保存账号同时存在
$ CNB_TOKEN=cnb_xxxx cnb-rs auth status
cnb.cool
✓ 使用环境变量 CNB_TOKEN 登录到 cnb.cool,账号 octocat
- Active account: true (由环境变量提供)
- Token: cnb_****xxxx
✓ 已登录到 cnb.cool,账号 octocat (keyring)
- Active account: true
- Token: cnb_****abcd
- 登录方式: OAuth (可静默刷新)
- Token 过期: 2026-05-23 10:00:00 (5d 12h 后)
! 该账号的 token 已被环境变量覆盖
# Token 无效(exit 1)
$ cnb-rs auth status
cnb.cool
✗ 无法登录到 cnb.cool 账号 octocat (keyring)
- Active account: true
- 错误: HTTP 401 Unauthorized
- Token: cnb_****xxxx
- 重新登录: cnb-rs auth login
- 删除该账号: cnb-rs auth logout
错误: 一个或多个账号认证失败
# keyring 不可用(exit 1)
$ cnb-rs auth status
cnb.cool
✗ 无法读取 cnb.cool 账号 octocat (keyring)
- Active account: true
- 错误: 访问 keyring 超时
- 重新登录: cnb-rs auth login
- 删除该账号: cnb-rs auth logout
错误: 一个或多个账号认证失败
# 只看 active 账号
$ cnb-rs auth status -a
cnb.cool
✓ 已登录到 cnb.cool,账号 octocat (keyring)
- Active account: true
- Token: cnb_****nQRo
- 登录方式: OAuth (可静默刷新)
- Token 过期: 2026-05-23 10:00:00 (5d 12h 后)
# 显示完整 Token
$ cnb-rs auth status -t
cnb.cool
✓ 已登录到 cnb.cool,账号 octocat (keyring)
- Active account: true
- Token: cnb_at_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- 登录方式: OAuth (可静默刷新)
- Token 过期: 2026-05-23 10:00:00 (5d 12h 后)
# 未登录
$ cnb-rs auth status
未登录到任何 CNB 域名 (cnb.cool)。
运行 `cnb-rs auth login` 登录,或设置环境变量 CNB_TOKEN。
# 检查指定域名
$ cnb-rs --domain example.com auth status
未登录到任何 CNB 域名 (example.com)。
运行 `cnb-rs auth login` 登录,或设置环境变量 CNB_TOKEN。退出码
| 情况 | 退出码 |
|---|---|
| 全部账号校验成功 | 0 |
| 任一账号校验失败/不可读 | 1 |
| 未登录到任何 CNB 域名 | 0 |
API
| 步骤 | API | 方法 | 说明 |
|---|---|---|---|
| 校验账号 | ${CNB_API_ENDPOINT}/user | GET | 验证 Token 并获取用户名 |
每个 entry 独立调用 /user:环境变量来源单独校验一次,stored 账号逐个校验。API 详情同 cnb-rs auth login — API 章节。